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


-- | Standard spec's for GenValidity instances
--   
--   Note: There are companion packages for this library:
--   
--   <ul>
--   <li><a>genvalidity-hspec-aeson</a></li>
--   <li><a>genvalidity-hspec-binary</a></li>
--   <li><a>genvalidity-hspec-cereal</a></li>
--   <li><a>genvalidity-hspec-hashable</a></li>
--   </ul>
@package genvalidity-hspec
@version 1.0.0.4


-- | Utilities for defining your own validity <a>Spec</a>s
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Utils
nameOf :: forall {k} (a :: k). Typeable a => String
genDescr :: forall {k} (a :: k). Typeable a => String -> String
binRelStr :: forall {k} (a :: k). Typeable a => String -> String
shouldFail :: Property -> Property

-- | Asserts that a given <a>Spec</a> tree fails _somewhere_.
--   
--   It also shows the given string when reporting that the tree
--   unexpectedly succeeded.
failsBecause :: String -> SpecWith () -> SpecWith ()
newtype Anon a
Anon :: a -> Anon a
shouldBeValid :: (Show a, Validity a) => a -> Expectation
shouldBeInvalid :: (Show a, Validity a) => a -> Expectation
instance GHC.Internal.Base.Functor Test.Validity.Utils.Anon
instance GHC.Internal.Show.Show (Test.Validity.Utils.Anon a)


-- | Tests for Shrinking functions
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Shrinking
shrinkValidSpec :: (Show a, Eq a, Typeable a, GenValid a) => Spec
shrinkValidSpecWithLimit :: (Show a, Eq a, Typeable a, GenValid a) => Int -> Spec
shrinkValidPreservesValidOnGenValid :: (Show a, GenValid a) => Property
shrinkValidPreservesValidOnGenValidWithLimit :: (Show a, GenValid a) => Int -> Property

-- | <pre>
--   shrinkPreservesValidOnGenValid ((:[]) :: Int -&gt; [Int])
--   </pre>
shrinkPreservesValidOnGenValid :: (Show a, GenValid a) => (a -> [a]) -> Property

-- | <pre>
--   shrinkValidPreservesValid (pure 5 :: Gen Rational)
--   </pre>
shrinkValidPreservesValid :: (Show a, GenValid a) => Gen a -> Property

-- | <pre>
--   shrinkingStaysValid (pure 5 :: Gen Double) (\d -&gt; [d - 1, d - 2])
--   </pre>
shrinkingStaysValid :: (Show a, Validity a) => Gen a -> (a -> [a]) -> Property

-- | <pre>
--   shrinkingPreserves (pure 5 :: Gen Int) (:[]) (== 5)
--   </pre>
shrinkingPreserves :: Show a => Gen a -> (a -> [a]) -> (a -> Bool) -> Property
shrinkValidDoesNotShrinkToItself :: (Show a, Eq a, GenValid a) => Property
shrinkValidDoesNotShrinkToItselfWithLimit :: (Show a, Eq a, GenValid a) => Int -> Property


-- | <a>Show</a> and <a>Read</a> properties
module Test.Validity.Show

-- | Standard test spec for properties of Show and Read instances for valid
--   values
--   
--   Example usage:
--   
--   <pre>
--   showReadSpec @Int
--   </pre>
showReadSpec :: (Show a, Eq a, Read a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Show and Read instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   showReadSpecOnArbitrary @Double
--   </pre>
showReadSpecOnArbitrary :: (Show a, Eq a, Read a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of Show and Read instances for
--   values generated by a custom generator
--   
--   Example usage:
--   
--   <pre>
--   showReadSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even" (const [])
--   </pre>
showReadSpecOnGen :: (Show a, Eq a, Read a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | <pre>
--   showReadRoundTrip @Int
--   </pre>
showReadRoundTrip :: (Show a, Eq a, Read a, GenValid a) => Property

-- | <pre>
--   showReadRoundTripOnArbitrary @Double
--   </pre>
showReadRoundTripOnArbitrary :: (Show a, Eq a, Read a, Arbitrary a) => Property

-- | <pre>
--   showReadRoundTripOnGen (abs &lt;$&gt; genValid :: Gen Int) (const [])
--   </pre>
showReadRoundTripOnGen :: (Show a, Eq a, Read a) => Gen a -> (a -> [a]) -> Property


-- | Ord properties
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Ord

-- | Standard test spec for properties of Ord instances for valid values
--   
--   Example usage:
--   
--   <pre>
--   ordSpec @Int
--   </pre>
ordSpec :: (Show a, Ord a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Ord instances for values
--   generated by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even"
--   </pre>
ordSpecOnGen :: (Show a, Ord a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | Standard test spec for properties of Ord instances for arbitrary
--   values
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnArbitrary @Int
--   </pre>
ordSpecOnArbitrary :: (Show a, Ord a, Typeable a, Arbitrary a) => Spec


-- | Monoid properties
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Monoid

-- | Standard test spec for properties of <a>Monoid</a> instances for valid
--   values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnValid @[Double]
--   </pre>
monoidSpecOnValid :: (Show a, Eq a, Monoid a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of <a>Monoid</a> instances for valid
--   values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpec @[Int]
--   </pre>
monoidSpec :: (Show a, Eq a, Monoid a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of <a>Monoid</a> instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnArbitrary @[Int]
--   </pre>
monoidSpecOnArbitrary :: (Show a, Eq a, Monoid a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of Monoid instances for values
--   generated by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnGen (pure "a") "singleton list of 'a'"
--   </pre>
monoidSpecOnGen :: (Show a, Eq a, Monoid a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec


-- | Monad properties
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Monad

-- | Standard test spec for properties of Monad instances for values
--   generated with GenValid instances
--   
--   Example usage:
--   
--   <pre>
--   monadSpec @[]
--   </pre>
monadSpec :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Monad f, Typeable f, GenValid (f Int)) => Spec

-- | Standard test spec for properties of Monad instances for values
--   generated with Arbitrary instances
--   
--   Example usage:
--   
--   <pre>
--   monadSpecOnArbitrary @[]
--   </pre>
monadSpecOnArbitrary :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Monad f, Typeable f, Arbitrary (f Int)) => Spec

-- | Standard test spec for properties of Monad instances for values
--   generated by given generators (and names for those generator).
--   
--   Example usage:
--   
--   <pre>
--   monadSpecOnGens
--       @[]
--       @Int
--       (pure 4)
--       "four"
--       (genListOf $ pure 5)
--       "list of fives"
--       (genListOf $ pure 6)
--       "list of sixes"
--       ((*) &lt;$&gt; genValid)
--       "factorisations"
--       (pure $ \a -&gt; [a])
--       "singletonisation"
--       (pure $ \a -&gt; [a])
--       "singletonisation"
--       (pure $ pure (+ 1))
--       "increment in list"
--   </pre>
monadSpecOnGens :: forall f a b c. (Show a, Show (f a), Show (f b), Show (f c), Eq (f a), Eq (f b), Eq (f c), Monad f, Typeable f, Typeable a, Typeable b, Typeable c) => Gen a -> String -> Gen (f a) -> String -> Gen (f b) -> String -> Gen (a -> b) -> String -> Gen (a -> f b) -> String -> Gen (b -> f c) -> String -> Gen (f (a -> b)) -> String -> Spec


-- | Tests for GenValidity instances
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.GenValidity

-- | A <tt>Spec</tt> that specifies that <tt>genValid</tt> only generates
--   valid data.
--   
--   In general it is a good idea to add this spec to your test suite if
--   you write a custom implementation of <tt>genValid</tt>.
--   
--   Example usage:
--   
--   <pre>
--   genValidSpec @Int
--   </pre>
genValidSpec :: (Typeable a, Show a, GenValid a) => Spec

-- | <tt>genValid</tt> only generates valid data
--   
--   <pre>
--   genValidGeneratesValid @()
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Bool
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Ordering
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Char
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Int
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Float
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Double
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Integer
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @(Maybe Int)
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @[Int]
--   </pre>
genValidGeneratesValid :: (Show a, GenValid a) => Property

-- | The given generator generates only valid data points
genGeneratesValid :: (Show a, Validity a) => Gen a -> Property

-- | The given generator generates only invalid data points
genGeneratesInvalid :: (Show a, Validity a) => Gen a -> Property


-- | Functor properties
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Functor

-- | Standard test spec for properties of Functor instances for values
--   generated with GenValid instances
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnArbitrary @[]
--   </pre>
functorSpec :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Functor f, Typeable f, GenValid (f Int)) => Spec

-- | Standard test spec for properties of Functor instances for values
--   generated with Arbitrary instances
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnArbitrary @[]
--   </pre>
functorSpecOnArbitrary :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Functor f, Typeable f, Arbitrary (f Int)) => Spec

-- | Standard test spec for properties of Functor instances for values
--   generated by given generators (and names for those generator).
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnGens
--       @[]
--       @Int
--       (pure 4) "four"
--       (genListOf $ pure 5) "list of fives"
--       ((+) &lt;$&gt; genValid) "additions"
--       ((*) &lt;$&gt; genValid) "multiplications"
--   </pre>
functorSpecOnGens :: forall f a b c. (Show a, Show (f a), Show (f c), Eq (f a), Eq (f c), Functor f, Typeable f, Typeable a, Typeable b, Typeable c) => Gen a -> String -> Gen (f a) -> String -> Gen (b -> c) -> String -> Gen (a -> b) -> String -> Spec


-- | Eq properties
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Eq

-- | Standard test spec for properties of Eq instances for valid values
--   
--   Example usage:
--   
--   <pre>
--   eqSpec @Int
--   </pre>
eqSpec :: (Show a, Eq a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Eq instances for arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnArbitrary @Int
--   </pre>
eqSpecOnArbitrary :: (Show a, Eq a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of Eq instances for values generated
--   by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even"
--   </pre>
eqSpecOnGen :: (Show a, Eq a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec


-- | Tests for Arbitrary instances involving Validity
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Arbitrary

-- | A <tt>Spec</tt> that specifies that <tt>arbitrary</tt> only generates
--   data that satisfy <tt>isValid</tt>
--   
--   Example usage:
--   
--   <pre>
--   arbitrarySpec @Int
--   </pre>
arbitrarySpec :: (Typeable a, Show a, Validity a, Arbitrary a) => Spec

-- | <tt>arbitrary</tt> only generates valid data
--   
--   <pre>
--   arbitraryGeneratesOnlyValid @Int
--   </pre>
arbitraryGeneratesOnlyValid :: (Show a, Validity a, Arbitrary a) => Property


-- | Applicative properties
--   
--   You will need <tt>TypeApplications</tt> to use these.
module Test.Validity.Applicative

-- | Standard test spec for properties of Applicative instances for values
--   generated with GenValid instances
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnArbitrary @[]
--   </pre>
applicativeSpec :: forall (f :: Type -> Type). (HasCallStack, Eq (f Int), Show (f Int), Applicative f, Typeable f, GenValid (f Int)) => Spec

-- | Standard test spec for properties of Applicative instances for values
--   generated with Arbitrary instances
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnArbitrary @[]
--   </pre>
applicativeSpecOnArbitrary :: forall (f :: Type -> Type). (HasCallStack, Eq (f Int), Show (f Int), Applicative f, Typeable f, Arbitrary (f Int)) => Spec

-- | Standard test spec for properties of Applicative instances for values
--   generated by given generators (and names for those generator).
--   
--   Unless you are building a specific regression test, you probably want
--   to use the other <a>applicativeSpec</a> functions.
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnGens
--       @Maybe
--       @String
--       (pure "ABC")
--       "ABC"
--       (Just &lt;$&gt; pure "ABC")
--       "Just an ABC"
--       (pure Nothing)
--       "purely Nothing"
--       ((++) &lt;$&gt; genValid)
--       "prepends"
--       (pure &lt;$&gt; ((++) &lt;$&gt; genValid))
--       "prepends in a Just"
--       (pure &lt;$&gt; (flip (++) &lt;$&gt; genValid))
--       "appends in a Just"
--   </pre>
applicativeSpecOnGens :: forall f a b c. (HasCallStack, Show a, Show (f a), Eq (f a), Show (f b), Eq (f b), Show (f c), Eq (f c), Applicative f, Typeable f, Typeable a, Typeable b, Typeable c) => Gen a -> String -> Gen (f a) -> String -> Gen (f b) -> String -> Gen (a -> b) -> String -> Gen (f (a -> b)) -> String -> Gen (f (b -> c)) -> String -> Spec


-- | To use the <tt>Spec</tt> functions in this module, you will need
--   <tt>TypeApplications</tt>.
--   
--   The most interesting functions in this module for most uses are:
--   
--   <ul>
--   <li><a>genValidSpec</a></li>
--   <li><a>eqSpec</a></li>
--   <li><a>ordSpec</a></li>
--   <li><tt>producesValidsOnValids</tt></li>
--   <li><a>forAllValid</a></li>
--   <li><a>shouldBeValid</a></li>
--   </ul>
module Test.Validity
forAllValid :: (Show a, GenValid a, Testable prop) => (a -> prop) -> Property
shouldBeValid :: (Show a, Validity a) => a -> Expectation
shouldBeInvalid :: (Show a, Validity a) => a -> Expectation

-- | A <tt>Spec</tt> that specifies that <tt>genValid</tt> only generates
--   valid data.
--   
--   In general it is a good idea to add this spec to your test suite if
--   you write a custom implementation of <tt>genValid</tt>.
--   
--   Example usage:
--   
--   <pre>
--   genValidSpec @Int
--   </pre>
genValidSpec :: (Typeable a, Show a, GenValid a) => Spec

-- | <tt>genValid</tt> only generates valid data
--   
--   <pre>
--   genValidGeneratesValid @()
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Bool
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Ordering
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Char
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Int
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Float
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Double
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @Integer
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @(Maybe Int)
--   </pre>
--   
--   <pre>
--   genValidGeneratesValid @[Int]
--   </pre>
genValidGeneratesValid :: (Show a, GenValid a) => Property

-- | The given generator generates only valid data points
genGeneratesValid :: (Show a, Validity a) => Gen a -> Property
shrinkValidSpec :: (Show a, Eq a, Typeable a, GenValid a) => Spec
shrinkValidSpecWithLimit :: (Show a, Eq a, Typeable a, GenValid a) => Int -> Spec
shrinkValidPreservesValidOnGenValid :: (Show a, GenValid a) => Property

-- | <pre>
--   shrinkPreservesValidOnGenValid ((:[]) :: Int -&gt; [Int])
--   </pre>
shrinkPreservesValidOnGenValid :: (Show a, GenValid a) => (a -> [a]) -> Property

-- | <pre>
--   shrinkValidPreservesValid (pure 5 :: Gen Rational)
--   </pre>
shrinkValidPreservesValid :: (Show a, GenValid a) => Gen a -> Property

-- | <pre>
--   shrinkingStaysValid (pure 5 :: Gen Double) (\d -&gt; [d - 1, d - 2])
--   </pre>
shrinkingStaysValid :: (Show a, Validity a) => Gen a -> (a -> [a]) -> Property

-- | <pre>
--   shrinkingPreserves (pure 5 :: Gen Int) (:[]) (== 5)
--   </pre>
shrinkingPreserves :: Show a => Gen a -> (a -> [a]) -> (a -> Bool) -> Property

-- | A <tt>Spec</tt> that specifies that <tt>arbitrary</tt> only generates
--   data that satisfy <tt>isValid</tt>
--   
--   Example usage:
--   
--   <pre>
--   arbitrarySpec @Int
--   </pre>
arbitrarySpec :: (Typeable a, Show a, Validity a, Arbitrary a) => Spec

-- | <tt>arbitrary</tt> only generates valid data
--   
--   <pre>
--   arbitraryGeneratesOnlyValid @Int
--   </pre>
arbitraryGeneratesOnlyValid :: (Show a, Validity a, Arbitrary a) => Property

-- | The function produces valid output when the input is generated as
--   specified by the given generator.
producesValidsOnGen :: (Show a, Show b, Validity b) => (a -> b) -> Gen a -> (a -> [a]) -> Property

-- | The function produces valid output when the input is generated by
--   <tt>genValid</tt>
producesValid :: (Show a, Show b, GenValid a, Validity b) => (a -> b) -> Property

-- | The function produces valid output when the input is generated by
--   <tt>arbitrary</tt>
producesValidsOnArbitrary :: (Show a, Show b, Arbitrary a, Validity b) => (a -> b) -> Property
producesValidsOnGens2 :: (Show a, Show b, Show c, Validity c) => (a -> b -> c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
producesValid2 :: (Show a, Show b, Show c, GenValid a, GenValid b, Validity c) => (a -> b -> c) -> Property
producesValidsOnArbitrary2 :: (Show a, Show b, Show c, Arbitrary a, Arbitrary b, Validity c) => (a -> b -> c) -> Property
producesValidsOnGens3 :: (Show a, Show b, Show c, Show d, Validity d) => (a -> b -> c -> d) -> Gen (a, b, c) -> ((a, b, c) -> [(a, b, c)]) -> Property
producesValid3 :: (Show a, Show b, Show c, Show d, GenValid a, GenValid b, GenValid c, Validity d) => (a -> b -> c -> d) -> Property
producesValidsOnArbitrary3 :: (Show a, Show b, Show c, Show d, Arbitrary a, Arbitrary b, Arbitrary c, Validity d) => (a -> b -> c -> d) -> Property

-- | A class of types that are the result of functions that can fail
class CanFail (f :: Type -> Type)
hasFailed :: CanFail f => f a -> Bool
resultIfSucceeded :: CanFail f => f a -> Maybe a

-- | The function succeeds if the input is generated by the given generator
succeedsOnGen :: (Show a, Show (f b), CanFail f) => (a -> f b) -> Gen a -> (a -> [a]) -> Property

-- | The function succeeds if the input is generated by <tt>genValid</tt>
succeeds :: (Show a, Show (f b), GenValid a, CanFail f) => (a -> f b) -> Property

-- | The function succeeds if the input is generated by <tt>arbitrary</tt>
succeedsOnArbitrary :: (Show a, Show (f b), Arbitrary a, CanFail f) => (a -> f b) -> Property
succeedsOnGens2 :: (Show a, Show b, Show (f c), CanFail f) => (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
succeeds2 :: (Show a, Show b, Show (f c), GenValid a, GenValid b, CanFail f) => (a -> b -> f c) -> Property
succeedsOnArbitrary2 :: (Show a, Show b, Show (f c), Arbitrary a, Arbitrary b, CanFail f) => (a -> b -> f c) -> Property

-- | The function fails if the input is generated by the given generator
failsOnGen :: (Show a, Show (f b), CanFail f) => (a -> f b) -> Gen a -> (a -> [a]) -> Property
failsOnGens2 :: (Show a, Show b, Show (f c), CanFail f) => (a -> b -> f c) -> Gen a -> (a -> [a]) -> Gen b -> (b -> [b]) -> Property

-- | The function produces output that satisfies <tt>isValid</tt> if it is
--   given input that is generated by the given generator.
validIfSucceedsOnGen :: (Show a, Show b, Validity b, CanFail f) => (a -> f b) -> Gen a -> (a -> [a]) -> Property

-- | The function produces output that satisfies <tt>isValid</tt> if it is
--   given input that is generated by <tt>arbitrary</tt>.
validIfSucceedsOnArbitrary :: (Show a, Show b, Arbitrary a, Validity b, CanFail f) => (a -> f b) -> Property

-- | The function produces output that satisfies <tt>isValid</tt> if it is
--   given input that is generated by <tt>genValid</tt>.
validIfSucceeds :: (Show a, Show b, GenValid a, Validity b, CanFail f) => (a -> f b) -> Property
validIfSucceedsOnGens2 :: (Show a, Show b, Show c, Validity c, CanFail f) => (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
validIfSucceeds2 :: (Show a, Show b, Show c, GenValid a, GenValid b, Validity c, CanFail f) => (a -> b -> f c) -> Property
validIfSucceedsOnArbitrary2 :: (Show a, Show b, Show c, Arbitrary a, Arbitrary b, Validity c, CanFail f) => (a -> b -> f c) -> Property
validIfSucceedsOnGens3 :: (Show a, Show b, Show c, Show d, Validity d, CanFail f) => (a -> b -> c -> f d) -> Gen (a, b, c) -> ((a, b, c) -> [(a, b, c)]) -> Property
validIfSucceeds3 :: (Show a, Show b, Show c, Show d, GenValid a, GenValid b, GenValid c, Validity d, CanFail f) => (a -> b -> c -> f d) -> Property
validIfSucceedsOnArbitrary3 :: (Show a, Show b, Show c, Show d, Arbitrary a, Arbitrary b, Arbitrary c, Validity d, CanFail f) => (a -> b -> c -> f d) -> Property
equivalentOnGen :: (Show a, Show b, Eq b) => (a -> b) -> (a -> b) -> Gen a -> (a -> [a]) -> Property
equivalent :: (Show a, GenValid a, Show b, Eq b) => (a -> b) -> (a -> b) -> Property

-- | <pre>
--   equivalentOnArbitrary ((* 2) . (+ 1)) ((+ 2) . (* 2) :: Int -&gt; Int)
--   </pre>
equivalentOnArbitrary :: (Show a, Arbitrary a, Show b, Eq b) => (a -> b) -> (a -> b) -> Property
equivalentOnGens2 :: (Show a, Show b, Show c, Eq c) => (a -> b -> c) -> (a -> b -> c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalent2 :: (Show a, GenValid a, Show b, GenValid b, Show c, Eq c) => (a -> b -> c) -> (a -> b -> c) -> Property

-- | <pre>
--   equivalentOnArbitrary2 (+) ((+) :: Int -&gt; Int -&gt; Int)
--   </pre>
equivalentOnArbitrary2 :: (Show a, Arbitrary a, Show b, Arbitrary b, Show c, Eq c) => (a -> b -> c) -> (a -> b -> c) -> Property
equivalentOnGens3 :: (Show a, Show b, Show c, Show d, Eq d) => (a -> b -> c -> d) -> (a -> b -> c -> d) -> Gen (a, b, c) -> ((a, b, c) -> [(a, b, c)]) -> Property
equivalent3 :: (Show a, GenValid a, Show b, GenValid b, Show c, GenValid c, Show d, Eq d) => (a -> b -> c -> d) -> (a -> b -> c -> d) -> Property
equivalentOnArbitrary3 :: (Show a, Arbitrary a, Show b, Arbitrary b, Show c, Arbitrary c, Show d, Eq d) => (a -> b -> c -> d) -> (a -> b -> c -> d) -> Property
equivalentWhenFirstSucceedsOnGen :: (Show a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Gen a -> (a -> [a]) -> Property
equivalentWhenFirstSucceeds :: (Show a, GenValid a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Property
equivalentWhenFirstSucceedsOnArbitrary :: (Show a, Arbitrary a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Property
equivalentWhenFirstSucceedsOnGens2 :: (Show a, Show b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalentWhenFirstSucceeds2 :: (Show a, GenValid a, Show b, GenValid b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Property
equivalentWhenFirstSucceedsOnArbitrary2 :: (Show a, Arbitrary a, Show b, Arbitrary b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Property
equivalentWhenSecondSucceedsOnGen :: (Show a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Gen a -> (a -> [a]) -> Property
equivalentWhenSecondSucceeds :: (Show a, GenValid a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Property
equivalentWhenSecondSucceedsOnArbitrary :: (Show a, Arbitrary a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Property
equivalentWhenSecondSucceedsOnGens2 :: (Show a, Show b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalentWhenSecondSucceeds2 :: (Show a, GenValid a, Show b, GenValid b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Property
equivalentWhenSecondSucceedsOnArbitrary2 :: (Show a, Arbitrary a, Show b, Arbitrary b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Property
equivalentWhenSucceedOnGen :: (Show a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Gen a -> (a -> [a]) -> Property
equivalentWhenSucceed :: (Show a, GenValid a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Property
equivalentWhenSucceedOnArbitrary :: (Show a, Arbitrary a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Property
equivalentWhenSucceedOnGens2 :: (Show a, Show b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalentWhenSucceed2 :: (Show a, GenValid a, Show b, GenValid b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> f c) -> Property
equivalentWhenSucceedOnArbitrary2 :: (Show a, Arbitrary a, Show b, Arbitrary b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> f c) -> Property
inverseFunctionsOnGen :: (Show a, Eq a) => (a -> b) -> (b -> a) -> Gen a -> (a -> [a]) -> Property
inverseFunctions :: (Show a, Eq a, GenValid a) => (a -> b) -> (b -> a) -> Property

-- | <a>id</a> is its own inverse function for every type: prop&gt;
--   inverseFunctionsOnArbitrary id (id :: Int -&gt; Int)
inverseFunctionsOnArbitrary :: (Show a, Eq a, Arbitrary a) => (a -> b) -> (b -> a) -> Property
inverseFunctionsIfFirstSucceedsOnGen :: (Show a, Eq a, CanFail f) => (a -> f b) -> (b -> a) -> Gen a -> (a -> [a]) -> Property
inverseFunctionsIfFirstSucceeds :: (Show a, Eq a, GenValid a, CanFail f) => (a -> f b) -> (b -> a) -> Property
inverseFunctionsIfFirstSucceedsOnArbitrary :: (Show a, Eq a, Arbitrary a, CanFail f) => (a -> f b) -> (b -> a) -> Property
inverseFunctionsIfSecondSucceedsOnGen :: (Show a, Eq a, CanFail f) => (a -> b) -> (b -> f a) -> Gen a -> (a -> [a]) -> Property
inverseFunctionsIfSecondSucceeds :: (Show a, Eq a, GenValid a, CanFail f) => (a -> b) -> (b -> f a) -> Property
inverseFunctionsIfSecondSucceedsOnArbitrary :: (Show a, Eq a, Arbitrary a, CanFail f) => (a -> b) -> (b -> f a) -> Property
inverseFunctionsIfSucceedOnGen :: (Show a, Eq a, CanFail f, CanFail g) => (a -> f b) -> (b -> g a) -> Gen a -> (a -> [a]) -> Property
inverseFunctionsIfSucceed :: (Show a, Eq a, GenValid a, CanFail f, CanFail g) => (a -> f b) -> (b -> g a) -> Property
inverseFunctionsIfSucceedOnArbitrary :: (Show a, Eq a, Arbitrary a, CanFail f, CanFail g) => (a -> f b) -> (b -> g a) -> Property
idempotentOnGen :: (Show a, Eq a) => (a -> a) -> Gen a -> (a -> [a]) -> Property
idempotent :: (Show a, Eq a, GenValid a) => (a -> a) -> Property

-- | <a>id</a> is idempotent for any type:
--   
--   <pre>
--   idempotentOnArbitrary (id :: Int -&gt; Int)
--   </pre>
--   
--   <a>const</a>, given any input, is idempotent for any type as well:
--   
--   <pre>
--   \int -&gt; idempotentOnArbitrary (const int :: Int -&gt; Int)
--   </pre>
idempotentOnArbitrary :: (Show a, Eq a, Arbitrary a) => (a -> a) -> Property

-- | &lt;math&gt;
reflexiveOnElem :: (a -> a -> Bool) -> a -> Bool
reflexivityOnGen :: Show a => (a -> a -> Bool) -> Gen a -> (a -> [a]) -> Property

-- | <pre>
--   reflexivity ((&lt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivity ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivity ((&gt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivity (Data.List.isPrefixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivity (Data.List.isSuffixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivity (Data.List.isInfixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
reflexivity :: (Show a, GenValid a) => (a -> a -> Bool) -> Property

-- | <pre>
--   reflexivityOnArbitrary ((&lt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnArbitrary ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnArbitrary ((&gt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnArbitrary (Data.List.isPrefixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnArbitrary (Data.List.isSuffixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnArbitrary (Data.List.isInfixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
reflexivityOnArbitrary :: (Show a, Arbitrary a) => (a -> a -> Bool) -> Property

-- | &lt;math&gt;
transitiveOnElems :: (a -> a -> Bool) -> a -> a -> a -> Bool
transitivityOnGens :: Show a => (a -> a -> Bool) -> Gen (a, a, a) -> (a -> [a]) -> Property

-- | <pre>
--   transitivity ((&gt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity ((&gt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity ((&lt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity ((&lt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity (Data.List.isPrefixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity (Data.List.isSuffixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivity (Data.List.isInfixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
transitivity :: (Show a, GenValid a) => (a -> a -> Bool) -> Property

-- | <pre>
--   transitivityOnArbitrary ((&gt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary ((&gt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary ((&lt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary ((&lt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary (Data.List.isPrefixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary (Data.List.isSuffixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnArbitrary (Data.List.isInfixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
transitivityOnArbitrary :: (Show a, Arbitrary a) => (a -> a -> Bool) -> Property

-- | &lt;math&gt;
antisymmetricOnElemsWithEquality :: (a -> a -> Bool) -> (a -> a -> Bool) -> a -> a -> Bool
antisymmetryOnGensWithEquality :: Show a => (a -> a -> Bool) -> Gen (a, a) -> (a -> a -> Bool) -> (a -> [a]) -> Property
antisymmetryOnGens :: (Show a, Eq a) => (a -> a -> Bool) -> Gen (a, a) -> (a -> [a]) -> Property

-- | <pre>
--   antisymmetry ((&gt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry ((&gt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry ((&lt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry ((&lt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry (Data.List.isPrefixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry (Data.List.isSuffixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry (Data.List.isInfixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetry ((\x y -&gt; even x &amp;&amp; odd y) :: Int -&gt; Int -&gt; Bool)
--   </pre>
antisymmetry :: (Show a, Eq a, GenValid a) => (a -> a -> Bool) -> Property

-- | <pre>
--   antisymmetryOnArbitrary ((&gt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary ((&gt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary ((&lt;=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary ((&lt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary (Data.List.isPrefixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary (Data.List.isSuffixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary (Data.List.isInfixOf :: [Int] -&gt; [Int] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnArbitrary ((\x y -&gt; even x &amp;&amp; odd y) :: Int -&gt; Int -&gt; Bool)
--   </pre>
antisymmetryOnArbitrary :: (Show a, Eq a, Arbitrary a) => (a -> a -> Bool) -> Property

-- | &lt;math&gt;
antireflexiveOnElem :: (a -> a -> Bool) -> a -> Bool
antireflexivityOnGen :: Show a => (a -> a -> Bool) -> Gen a -> (a -> [a]) -> Property

-- | <pre>
--   antireflexivity ((&lt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antireflexivity ((/=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antireflexivity ((&gt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
antireflexivity :: (Show a, GenValid a) => (a -> a -> Bool) -> Property

-- | <pre>
--   antireflexivityOnArbitrary ((&lt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antireflexivityOnArbitrary ((/=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antireflexivityOnArbitrary ((&gt;) :: Int -&gt; Int -&gt; Bool)
--   </pre>
antireflexivityOnArbitrary :: (Show a, Arbitrary a) => (a -> a -> Bool) -> Property

-- | &lt;math&gt;
symmetricOnElems :: (a -> a -> Bool) -> a -> a -> Bool
symmetryOnGens :: Show a => (a -> a -> Bool) -> Gen (a, a) -> (a -> [a]) -> Property

-- | <pre>
--   symmetry ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   symmetry ((/=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
symmetry :: (Show a, GenValid a) => (a -> a -> Bool) -> Property

-- | <pre>
--   symmetryOnArbitrary ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   symmetryOnArbitrary ((/=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
symmetryOnArbitrary :: (Show a, Arbitrary a) => (a -> a -> Bool) -> Property

-- | &lt;math&gt;
leftIdentityOnElemWithEquality :: (b -> a -> a) -> (a -> a -> Bool) -> b -> a -> Bool
leftIdentityOnGenWithEquality :: Show a => (b -> a -> a) -> (a -> a -> Bool) -> b -> Gen a -> (a -> [a]) -> Property
leftIdentityOnGen :: (Show a, Eq a) => (b -> a -> a) -> b -> Gen a -> (a -> [a]) -> Property

-- | <pre>
--   leftIdentity (flip ((^) :: Int -&gt; Int -&gt; Int)) 1
--   </pre>
leftIdentity :: (Show a, Eq a, GenValid a) => (b -> a -> a) -> b -> Property

-- | <pre>
--   leftIdentityOnArbitrary (flip ((^) :: Int -&gt; Int -&gt; Int)) 1
--   </pre>
leftIdentityOnArbitrary :: (Show a, Eq a, Arbitrary a) => (b -> a -> a) -> b -> Property

-- | &lt;math&gt;
rightIdentityOnElemWithEquality :: (a -> b -> a) -> (a -> a -> Bool) -> b -> a -> Bool
rightIdentityOnGenWithEquality :: Show a => (a -> b -> a) -> (a -> a -> Bool) -> b -> Gen a -> (a -> [a]) -> Property
rightIdentityOnGen :: (Show a, Eq a) => (a -> b -> a) -> b -> Gen a -> (a -> [a]) -> Property

-- | <pre>
--   rightIdentity ((^) :: Int -&gt; Int -&gt; Int) 1
--   </pre>
rightIdentity :: (Show a, Eq a, GenValid a) => (a -> b -> a) -> b -> Property

-- | <pre>
--   rightIdentityOnArbitrary ((^) :: Int -&gt; Int -&gt; Int) 1
--   </pre>
rightIdentityOnArbitrary :: (Show a, Eq a, Arbitrary a) => (a -> b -> a) -> b -> Property

-- | &lt;math&gt;
identityOnGen :: (Show a, Eq a) => (a -> a -> a) -> a -> Gen a -> (a -> [a]) -> Property

-- | <pre>
--   identity ((*) :: Int -&gt; Int -&gt; Int) 1
--   </pre>
--   
--   <pre>
--   identity ((+) :: Int -&gt; Int -&gt; Int) 0
--   </pre>
identity :: (Show a, Eq a, GenValid a) => (a -> a -> a) -> a -> Property

-- | <pre>
--   identityOnArbitrary ((*) :: Int -&gt; Int -&gt; Int) 1
--   </pre>
--   
--   <pre>
--   identityOnArbitrary ((+) :: Int -&gt; Int -&gt; Int) 0
--   </pre>
identityOnArbitrary :: (Show a, Eq a, Arbitrary a) => (a -> a -> a) -> a -> Property

-- | &lt;math&gt;
associativeOnGens :: (Show a, Eq a) => (a -> a -> a) -> Gen (a, a, a) -> ((a, a, a) -> [(a, a, a)]) -> Property

-- | <pre>
--   associative ((*) :: Int -&gt; Int -&gt; Int)
--   </pre>
--   
--   <pre>
--   associative ((+) :: Int -&gt; Int -&gt; Int)
--   </pre>
associative :: (Show a, Eq a, GenValid a) => (a -> a -> a) -> Property

-- | <pre>
--   associativeOnArbitrary ((*) :: Int -&gt; Int -&gt; Int)
--   </pre>
--   
--   <pre>
--   associativeOnArbitrary ((+) :: Int -&gt; Int -&gt; Int)
--   </pre>
associativeOnArbitrary :: (Show a, Eq a, Arbitrary a) => (a -> a -> a) -> Property

-- | &lt;math&gt;
commutativeOnGens :: (Show a, Show b, Eq b) => (a -> a -> b) -> Gen (a, a) -> ((a, a) -> [(a, a)]) -> Property

-- | <pre>
--   commutative ((+) :: Int -&gt; Int -&gt; Int)
--   </pre>
--   
--   <pre>
--   commutative ((*) :: Int -&gt; Int -&gt; Int)
--   </pre>
commutative :: (Show a, Show b, Eq b, GenValid a) => (a -> a -> b) -> Property

-- | <pre>
--   commutativeOnArbitrary ((+) :: Int -&gt; Int -&gt; Int)
--   </pre>
--   
--   <pre>
--   commutativeOnArbitrary ((*) :: Int -&gt; Int -&gt; Int)
--   </pre>
--   
--   commutativeOnArbitrary :: (Show a, Eq a, Arbitrary a) =&gt; (a -&gt; a
--   -&gt; a) -&gt; Property
commutativeOnArbitrary :: (Show a, Show b, Eq b, Arbitrary a) => (a -> a -> b) -> Property

-- | Standard test spec for properties of Show and Read instances for valid
--   values
--   
--   Example usage:
--   
--   <pre>
--   showReadSpec @Int
--   </pre>
showReadSpec :: (Show a, Eq a, Read a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Show and Read instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   showReadSpecOnArbitrary @Double
--   </pre>
showReadSpecOnArbitrary :: (Show a, Eq a, Read a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of Show and Read instances for
--   values generated by a custom generator
--   
--   Example usage:
--   
--   <pre>
--   showReadSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even" (const [])
--   </pre>
showReadSpecOnGen :: (Show a, Eq a, Read a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | Standard test spec for properties of Eq instances for valid values
--   
--   Example usage:
--   
--   <pre>
--   eqSpec @Int
--   </pre>
eqSpec :: (Show a, Eq a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Eq instances for arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnArbitrary @Int
--   </pre>
eqSpecOnArbitrary :: (Show a, Eq a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of Eq instances for values generated
--   by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even"
--   </pre>
eqSpecOnGen :: (Show a, Eq a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | Standard test spec for properties of Ord instances for values
--   generated by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even"
--   </pre>
ordSpecOnGen :: (Show a, Ord a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | Standard test spec for properties of Ord instances for valid values
--   
--   Example usage:
--   
--   <pre>
--   ordSpec @Int
--   </pre>
ordSpec :: (Show a, Ord a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Ord instances for arbitrary
--   values
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnArbitrary @Int
--   </pre>
ordSpecOnArbitrary :: (Show a, Ord a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of <a>Monoid</a> instances for valid
--   values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpec @[Int]
--   </pre>
monoidSpec :: (Show a, Eq a, Monoid a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of <a>Monoid</a> instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnArbitrary @[Int]
--   </pre>
monoidSpecOnArbitrary :: (Show a, Eq a, Monoid a, Typeable a, Arbitrary a) => Spec

-- | Standard test spec for properties of Monoid instances for values
--   generated by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnGen (pure "a") "singleton list of 'a'"
--   </pre>
monoidSpecOnGen :: (Show a, Eq a, Monoid a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | Standard test spec for properties of Functor instances for values
--   generated with GenValid instances
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnArbitrary @[]
--   </pre>
functorSpec :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Functor f, Typeable f, GenValid (f Int)) => Spec

-- | Standard test spec for properties of Functor instances for values
--   generated with Arbitrary instances
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnArbitrary @[]
--   </pre>
functorSpecOnArbitrary :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Functor f, Typeable f, Arbitrary (f Int)) => Spec

-- | Standard test spec for properties of Functor instances for values
--   generated by given generators (and names for those generator).
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnGens
--       @[]
--       @Int
--       (pure 4) "four"
--       (genListOf $ pure 5) "list of fives"
--       ((+) &lt;$&gt; genValid) "additions"
--       ((*) &lt;$&gt; genValid) "multiplications"
--   </pre>
functorSpecOnGens :: forall f a b c. (Show a, Show (f a), Show (f c), Eq (f a), Eq (f c), Functor f, Typeable f, Typeable a, Typeable b, Typeable c) => Gen a -> String -> Gen (f a) -> String -> Gen (b -> c) -> String -> Gen (a -> b) -> String -> Spec

-- | Standard test spec for properties of Applicative instances for values
--   generated with GenValid instances
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnArbitrary @[]
--   </pre>
applicativeSpec :: forall (f :: Type -> Type). (HasCallStack, Eq (f Int), Show (f Int), Applicative f, Typeable f, GenValid (f Int)) => Spec

-- | Standard test spec for properties of Applicative instances for values
--   generated with Arbitrary instances
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnArbitrary @[]
--   </pre>
applicativeSpecOnArbitrary :: forall (f :: Type -> Type). (HasCallStack, Eq (f Int), Show (f Int), Applicative f, Typeable f, Arbitrary (f Int)) => Spec

-- | Standard test spec for properties of Applicative instances for values
--   generated by given generators (and names for those generator).
--   
--   Unless you are building a specific regression test, you probably want
--   to use the other <a>applicativeSpec</a> functions.
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnGens
--       @Maybe
--       @String
--       (pure "ABC")
--       "ABC"
--       (Just &lt;$&gt; pure "ABC")
--       "Just an ABC"
--       (pure Nothing)
--       "purely Nothing"
--       ((++) &lt;$&gt; genValid)
--       "prepends"
--       (pure &lt;$&gt; ((++) &lt;$&gt; genValid))
--       "prepends in a Just"
--       (pure &lt;$&gt; (flip (++) &lt;$&gt; genValid))
--       "appends in a Just"
--   </pre>
applicativeSpecOnGens :: forall f a b c. (HasCallStack, Show a, Show (f a), Eq (f a), Show (f b), Eq (f b), Show (f c), Eq (f c), Applicative f, Typeable f, Typeable a, Typeable b, Typeable c) => Gen a -> String -> Gen (f a) -> String -> Gen (f b) -> String -> Gen (a -> b) -> String -> Gen (f (a -> b)) -> String -> Gen (f (b -> c)) -> String -> Spec

-- | Standard test spec for properties of Monad instances for values
--   generated with GenValid instances
--   
--   Example usage:
--   
--   <pre>
--   monadSpec @[]
--   </pre>
monadSpec :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Monad f, Typeable f, GenValid (f Int)) => Spec

-- | Standard test spec for properties of Monad instances for values
--   generated with Arbitrary instances
--   
--   Example usage:
--   
--   <pre>
--   monadSpecOnArbitrary @[]
--   </pre>
monadSpecOnArbitrary :: forall (f :: Type -> Type). (Eq (f Int), Show (f Int), Monad f, Typeable f, Arbitrary (f Int)) => Spec

-- | Standard test spec for properties of Monad instances for values
--   generated by given generators (and names for those generator).
--   
--   Example usage:
--   
--   <pre>
--   monadSpecOnGens
--       @[]
--       @Int
--       (pure 4)
--       "four"
--       (genListOf $ pure 5)
--       "list of fives"
--       (genListOf $ pure 6)
--       "list of sixes"
--       ((*) &lt;$&gt; genValid)
--       "factorisations"
--       (pure $ \a -&gt; [a])
--       "singletonisation"
--       (pure $ \a -&gt; [a])
--       "singletonisation"
--       (pure $ pure (+ 1))
--       "increment in list"
--   </pre>
monadSpecOnGens :: forall f a b c. (Show a, Show (f a), Show (f b), Show (f c), Eq (f a), Eq (f b), Eq (f c), Monad f, Typeable f, Typeable a, Typeable b, Typeable c) => Gen a -> String -> Gen (f a) -> String -> Gen (f b) -> String -> Gen (a -> b) -> String -> Gen (a -> f b) -> String -> Gen (b -> f c) -> String -> Gen (f (a -> b)) -> String -> Spec
