module Hedgehog (
  
    Property
  , PropertyT
  , Group(..)
  , PropertyName
  , GroupName
  , property
  , test
  , forAll
  , forAllWith
  , discard
  , check
  , recheck
  , recheckAt
  , discover
  , discoverPrefix
  , checkParallel
  , checkSequential
  , Confidence
  , verifiedTermination
  , withConfidence
  , withTests
  , TestLimit
  , withDiscards
  , DiscardLimit
  , withShrinks
  , ShrinkLimit
  , withRetries
  , ShrinkRetries
  , withSkip
  , Skip
  
  , Gen
  , GenT
  , MonadGen(..)
  , Range
  , Size(..)
  , Seed(..)
  
  , Test
  , TestT
  , MonadTest(..)
  , annotate
  , annotateShow
  , footnote
  , footnoteShow
  , success
  , failure
  , assert
  , diff
  , (===)
  , (/==)
  , tripping
  , eval
  , evalNF
  , evalM
  , evalIO
  , evalEither
  , evalEitherM
  , evalExceptT
  , evalMaybe
  , evalMaybeM
  
  , LabelName
  , classify
  , cover
  , label
  , collect
  
  , Command(..)
  , Callback(..)
  , Action
  , Sequential(..)
  , Parallel(..)
  , executeSequential
  , executeParallel
  , Var(..)
  , concrete
  , opaque
  , Symbolic
  , Concrete(..)
  , Opaque(..)
  
  , distributeT
  
  
  , FunctorB(..)
  , TraversableB(..)
  , Rec(..)
  , Eq1
  , eq1
  , Ord1
  , compare1
  , Show1
  , showsPrec1
  
  , HTraversable(..)
  ) where
import           Data.Functor.Classes (Eq1, eq1, Ord1, compare1, Show1, showsPrec1)
import           Hedgehog.Internal.Barbie (FunctorB(..), TraversableB(..), Rec(..))
import           Hedgehog.Internal.Distributive (distributeT)
import           Hedgehog.Internal.Gen (Gen, GenT, MonadGen(..))
import           Hedgehog.Internal.HTraversable (HTraversable(..))
import           Hedgehog.Internal.Opaque (Opaque(..))
import           Hedgehog.Internal.Property (annotate, annotateShow)
import           Hedgehog.Internal.Property (assert, diff, (===), (/==))
import           Hedgehog.Internal.Property (classify, cover)
import           Hedgehog.Internal.Property (discard, failure, success)
import           Hedgehog.Internal.Property (DiscardLimit, withDiscards)
import           Hedgehog.Internal.Property (eval, evalNF, evalM, evalIO)
import           Hedgehog.Internal.Property (evalEither, evalEitherM, evalExceptT, evalMaybe, evalMaybeM)
import           Hedgehog.Internal.Property (footnote, footnoteShow)
import           Hedgehog.Internal.Property (forAll, forAllWith)
import           Hedgehog.Internal.Property (LabelName, MonadTest(..))
import           Hedgehog.Internal.Property (Property, PropertyT, PropertyName)
import           Hedgehog.Internal.Property (Group(..), GroupName)
import           Hedgehog.Internal.Property (Confidence, verifiedTermination, withConfidence)
import           Hedgehog.Internal.Property (ShrinkLimit, withShrinks)
import           Hedgehog.Internal.Property (ShrinkRetries, withRetries)
import           Hedgehog.Internal.Property (Skip, withSkip)
import           Hedgehog.Internal.Property (Test, TestT, property, test)
import           Hedgehog.Internal.Property (TestLimit, withTests)
import           Hedgehog.Internal.Property (collect, label)
import           Hedgehog.Internal.Range (Range, Size(..))
import           Hedgehog.Internal.Runner (check, recheck, recheckAt, checkSequential, checkParallel)
import           Hedgehog.Internal.Seed (Seed(..))
import           Hedgehog.Internal.State (Command(..), Callback(..))
import           Hedgehog.Internal.State (Action, Sequential(..), Parallel(..))
import           Hedgehog.Internal.State (executeSequential, executeParallel)
import           Hedgehog.Internal.State (Var(..), Symbolic, Concrete(..), concrete, opaque)
import           Hedgehog.Internal.TH (discover, discoverPrefix)
import           Hedgehog.Internal.Tripping (tripping)