    module Test.QuickCheck.State where

    import Test.QuickCheck.Text
    import System.Random( StdGen )

    --------------------------------------------------------------------------
    -- State

    -- | State represents QuickCheck's internal state while testing a property.
    -- The state is made visible to callback functions.
    data State
      = MkState
      -- static
      { terminal                  :: Terminal          -- ^ the current terminal
      , maxSuccessTests           :: Int               -- ^ maximum number of successful tests needed
      , maxDiscardedTests         :: Int               -- ^ maximum number of tests that can be discarded
      , computeSize               :: Int -> Int -> Int -- ^ how to compute the size of test cases from
                                                       -- #tests and #discarded tests

                                                       -- dynamic
      , numSuccessTests           :: Int               -- ^ the current number of tests that have succeeded
      , numDiscardedTests         :: Int               -- ^ the current number of discarded tests
      , numRecentlyDiscardedTests :: Int               -- ^ the number of discarded tests since the last successful test
      , collected                 :: [[(String,Int)]]  -- ^ all labels that have been collected so far
      , expectedFailure           :: Bool              -- ^ indicates if the property is expected to fail
      , randomSeed                :: StdGen            -- ^ the current random seed

                                                       -- shrinking
      , numSuccessShrinks         :: Int               -- ^ number of successful shrinking steps so far
      , numTryShrinks             :: Int               -- ^ number of failed shrinking steps since the last successful shrink
      , numTotTryShrinks          :: Int               -- ^ total number of failed shrinking steps
      }

    --------------------------------------------------------------------------
    -- the end.