-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Integrate Hedgehog and Hspec!
--   
--   Please see the README on GitHub at
--   https://github.com/parsonsmatt/hspec-hedgehog#readme
@package hspec-hedgehog
@version 0.0.1.2

-- | This module allows you to easily integrate the Hedgehog library
--   with Test.Hspec test-suites.
--   
--   To get started, check out the hedgehog function, which lets you
--   embed a PropertyT directly.
--   
--   
--   spec :: Spec
--   spec =
--     describe "my great test" $ do
--       it "generates stuff" $
--         hedgehog $ do
--           a <- forAll generator
--           a === expected
--   
--   
--   Truth be told, the functionality is in the two orphan instances of
--   Example for PropertyT. You can directly use code in the
--   PropertyT IO type. However, because most
--   Hedgehog functions are abstract in MonadTest, you might
--   get errors about ambiguous types. The hedgehog function fixes
--   the type to PropertyT IO (), which
--   works out just fine.
--   
--   You can use all of hspec's hooks with this, of course.
--   
--   
--   spec :: Spec
--   spec = before (pure "Hello!") $ do
--     describe "with a string" $ do
--       it "gets a string" $ \ str ->
--         hedgehog $ do
--           wrongLen <- forAll $ integral (linear 0 3)
--           length str /== wrongLen
--   
--   
--   The function before will make all the following spec items a
--   function, accepting that as a parameter. You should call
--   hedgehog after the lambda.
--   
--   If you are morally opposed to the pattern:
--   
--   
--   it "message" $ hedgehog $ do
--     True === False
--   
--   
--   Then you can alternatively force the type some other way. One option
--   is to use a no-op function, like this:
--   
--   
--   it "message" $ do
--     pure () :: PropertyT IO ()
--     True === False
--   
--   
--   This style has the advantage that parameters via hooks are less
--   difficult to get right.
--   
--   
--   before (pure "Hello!") $ do
--     it "message" $ \str -> do
--       pure () :: PropertyT IO ()
--       wrongLen <- forAll $ integral (linear 0 3)
--       length str /== wrongLen
--   
--   
--   You don't have to remember to put the hedgehog call after the
--   lambda.
module Test.Hspec.Hedgehog

-- | Embed a Hedgehog PropertyT IO () in an
--   hspec test.
--   
--   
--   spec :: Spec
--   spec =
--     describe "my great test" $ do
--       it "generates stuff" $
--         hedgehog $ do
--           a <- forAll generator
--           a === expected
--   
--   
--   This function is only used to fix the type of the
--   PropertyT monad transformer. The functions in
--   Hedgehog are typically abstract in a MonadTest, and it's
--   easy to get ambiguous type errors if you leave this out.
hedgehog :: HasCallStack => PropertyT IO () -> PropertyT IO ()

-- | Use modified Args for given spec.
modifyArgs :: (Args -> Args) -> SpecWith a -> SpecWith a

-- | Use a modified maxSuccess for given spec.
modifyMaxSuccess :: (Int -> Int) -> SpecWith a -> SpecWith a

-- | Use a modified maxDiscardRatio for given spec.
modifyMaxDiscardRatio :: (Int -> Int) -> SpecWith a -> SpecWith a

-- | Use a modified maxSize for given spec.
modifyMaxSize :: (Int -> Int) -> SpecWith a -> SpecWith a

-- | Use a modified maxShrinks for given spec.
modifyMaxShrinks :: (Int -> Int) -> SpecWith a -> SpecWith a
instance Test.Hspec.Core.Example.Example (Hedgehog.Internal.Property.PropertyT GHC.Types.IO ())
instance Test.Hspec.Core.Example.Example (a -> Hedgehog.Internal.Property.PropertyT GHC.Types.IO ())
