-- 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 0.7.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 a. Typeable a => String
genDescr :: forall a. Typeable a => String -> String
binRelStr :: forall a. 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.Show.Show (Test.Validity.Utils.Anon a)
instance GHC.Base.Functor Test.Validity.Utils.Anon


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

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

-- | <pre>
--   shrinkPreservesInvalidOnGenInvalid ((:[]) :: Rational -&gt; [Rational])
--   </pre>
shrinkPreservesInvalidOnGenInvalid :: (Show a, GenInvalid a) => (a -> [a]) -> Property

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

shrinkInvalidPreservesInvalid :: (Show a, GenInvalid 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>
--   shrinkingStaysInvalid (pure (1/0) :: Gen Double) (:[])
--   </pre>
shrinkingStaysInvalid :: (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
shrinkUncheckedDoesNotShrinkToItself :: forall a. (Show a, Eq a, GenUnchecked a) => Property
shrinkUncheckedDoesNotShrinkToItselfWithLimit :: forall a. (Show a, Eq a, GenUnchecked a) => Int -> Property
shrinkValidDoesNotShrinkToItself :: forall a. (Show a, Eq a, GenValid a) => Property
shrinkValidDoesNotShrinkToItselfWithLimit :: forall a. (Show a, Eq a, GenUnchecked a, GenValid a) => Int -> Property
shrinkInvalidDoesNotShrinkToItself :: forall a. (Show a, Eq a, GenInvalid a) => Property
shrinkInvalidDoesNotShrinkToItselfWithLimit :: forall a. (Show a, Eq a, GenUnchecked a, GenInvalid 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>
--   showReadSpecOnValid @Double
--   </pre>
showReadSpecOnValid :: forall a. (Show a, Eq a, Read a, Typeable a, GenValid a) => Spec

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

-- | Standard test spec for properties of Show and Read instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   showReadSpecOnArbitrary @Double
--   </pre>
showReadSpecOnArbitrary :: forall a. (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 :: forall a. (Show a, Eq a, Read a, Typeable a) => Gen a -> String -> (a -> [a]) -> Spec

-- | <pre>
--   showReadRoundTripOnValid @Rational
--   </pre>
showReadRoundTripOnValid :: forall a. (Show a, Eq a, Read a, GenValid a) => Property

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

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

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


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

-- | A <tt>Spec</tt> that specifies that <tt>isValidFor</tt> implies
--   <tt>isValid</tt>
--   
--   In general it is a good idea to add this spec to your test suite if
--   the <tt>a</tt> and <tt>b</tt> in <tt>RelativeValidity a b</tt> also
--   have a <tt>Validity</tt> instance.
--   
--   Example usage:
--   
--   <pre>
--   relativeValiditySpec @MyDataFor @MyOtherData
--   </pre>
relativeValiditySpec :: forall a b. (Typeable a, Typeable b, Show a, Show b, Validity a, Validity b, GenUnchecked a, GenUnchecked b, RelativeValidity a b) => Spec

-- | <tt>isValidFor a b</tt> implies <tt>isValid a</tt> for all <tt>b</tt>
relativeValidityImpliesValidA :: forall a b. (Show a, Show b, Validity a, GenUnchecked a, GenUnchecked b, RelativeValidity a b) => Property

-- | <tt>isValidFor a b</tt> implies <tt>isValid b</tt> for all <tt>a</tt>
relativeValidityImpliesValidB :: forall a b. (Show a, Show b, Validity b, GenUnchecked a, GenUnchecked b, RelativeValidity a b) => 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 values
--   generated by a given generator (and name for that generator).
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnGen ((* 2) &lt;$&gt; genValid @Int) "even"
--   </pre>
ordSpecOnGen :: forall a. (Show a, Eq 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>
--   ordSpecOnValid @Double
--   </pre>
ordSpecOnValid :: forall a. (Show a, Ord a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Ord instances for invalid values
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnInvalid @Double
--   </pre>
ordSpecOnInvalid :: forall a. (Show a, Ord a, Typeable a, GenInvalid a) => Spec

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

-- | Standard test spec for properties of Ord instances for arbitrary
--   values
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnArbitrary @Int
--   </pre>
ordSpecOnArbitrary :: forall a. (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 :: forall a. (Show a, Eq a, Monoid a, Typeable a, GenValid a) => Spec

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

-- | Standard test spec for properties of <a>Monoid</a> instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnArbitrary @[Int]
--   </pre>
monoidSpecOnArbitrary :: forall a. (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 :: forall a. (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>
--   monadSpecOnValid @[]
--   </pre>
monadSpecOnValid :: forall (f :: * -> *). (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 GenUnchecked instances
--   
--   Example usage:
--   
--   <pre>
--   monadSpec @[]
--   </pre>
monadSpec :: forall (f :: * -> *). (Eq (f Int), Show (f Int), Monad f, Typeable f, GenUnchecked (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 :: * -> *). (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, Eq 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 spec for properties of <a>GenValid</a> and <a>GenInvalid</a>
--   instances.
--   
--   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> or
--   <tt>genInvalid</tt>.
--   
--   <b>It is not a good idea to use this function if invalid values are
--   broken in such a way that <a>Show</a> or even <a>isValid</a> is
--   broken.</b> In that case you probably want <a>genValidSpec</a>.
--   
--   Example usage:
--   
--   <pre>
--   genValiditySpec @Int
--   </pre>
genValiditySpec :: forall a. (Typeable a, Show a, GenValid a, GenInvalid a) => Spec

-- | 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 :: forall a. (Typeable a, Show a, GenValid a) => Spec

-- | A <tt>Spec</tt> that specifies that <tt>genInvalid</tt> only generates
--   invalid data.
--   
--   Note that it is not a good idea to use this function if invalid values
--   are broken in such a way that <a>Show</a> or even <a>isValid</a> is
--   broken.
--   
--   Example usage:
--   
--   <pre>
--   genInvalidSpec @Rational
--   </pre>
genInvalidSpec :: forall a. (Typeable a, Show a, GenInvalid 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 :: forall a. (Show a, GenValid a) => Property

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

-- | <tt>genValid</tt> only generates invalid data
--   
--   <pre>
--   genInvalidGeneratesInvalid @Rational
--   </pre>
--   
--   <pre>
--   genInvalidGeneratesInvalid @Rational
--   </pre>
--   
--   <pre>
--   genInvalidGeneratesInvalid @(Maybe Rational)
--   </pre>
--   
--   <pre>
--   genInvalidGeneratesInvalid @[Rational]
--   </pre>
genInvalidGeneratesInvalid :: forall a. (Show a, GenInvalid a) => Property

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


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

-- | A <tt>Spec</tt> that specifies that <tt>genValidFor</tt> and
--   <tt>genInvalidFor</tt> work as intended.
--   
--   In general it is a good idea to add this spec to your test suite if
--   you write a custom implementation of <tt>genValidFor</tt> or
--   <tt>genInvalidFor</tt>.
--   
--   Example usage:
--   
--   <pre>
--   relativeGenValiditySpec @MyDataFor @MyOtherData
--   </pre>
genRelativeValiditySpec :: forall a b. (Typeable a, Typeable b, Show a, Show b, GenUnchecked b, GenValid b, GenRelativeValid a b, GenRelativeInvalid a b) => Spec
genRelativeValidSpec :: forall a b. (Typeable a, Typeable b, Show a, Show b, GenValid a, GenValid b, RelativeValidity a b, GenRelativeValid a b) => Spec
genRelativeInvalidSpec :: forall a b. (Typeable a, Typeable b, Show a, Show b, GenValid a, GenUnchecked b, GenValid b, RelativeValidity a b, GenRelativeInvalid a b) => Spec

-- | <tt>genValidFor b</tt> only generates values that satisfy
--   <tt>isValidFor b</tt>
genRelativeValidGeneratesValid :: forall a b. (Show a, Show b, GenValid b, RelativeValidity a b, GenRelativeValid a b) => Property

-- | <tt>genInvalidFor b</tt> only generates values that do not satisfy
--   <tt>isValidFor b</tt>
genRelativeInvalidGeneratesInvalid :: forall a b. (Show a, Show b, GenUnchecked b, RelativeValidity a b, GenRelativeInvalid a b) => 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>
functorSpecOnValid :: forall (f :: * -> *). (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 GenUnchecked instances
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnArbitrary @[]
--   </pre>
functorSpec :: forall (f :: * -> *). (Eq (f Int), Show (f Int), Functor f, Typeable f, GenUnchecked (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 :: * -> *). (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>
--   eqSpecOnValid @Double
--   </pre>
eqSpecOnValid :: forall a. (Show a, Eq a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Eq instances for invalid values
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnInvalid @Double
--   </pre>
eqSpecOnInvalid :: forall a. (Show a, Eq a, Typeable a, GenInvalid a) => Spec

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

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

-- | <tt>arbitrary</tt> only generates valid data
--   
--   <pre>
--   arbitraryGeneratesOnlyValid @Int
--   </pre>
arbitraryGeneratesOnlyValid :: forall a. (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>
applicativeSpecOnValid :: forall (f :: * -> *). (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 GenUnchecked instances
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnArbitrary @[]
--   </pre>
applicativeSpec :: forall (f :: * -> *). (Eq (f Int), Show (f Int), Applicative f, Typeable f, GenUnchecked (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 :: * -> *). (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 :: *). (Show a, Eq 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>eqSpecOnValid</a></li>
--   <li><a>ordSpecOnValid</a></li>
--   <li><a>producesValidsOnValids</a></li>
--   <li><a>forAllValid</a></li>
--   <li><a>shouldBeValid</a></li>
--   </ul>
module Test.Validity
forAllUnchecked :: (Show a, GenUnchecked a, Testable prop) => (a -> prop) -> Property
forAllValid :: (Show a, GenValid a, Testable prop) => (a -> prop) -> Property
forAllInvalid :: (Show a, GenInvalid a, Testable prop) => (a -> prop) -> Property
shouldBeValid :: (Show a, Validity a) => a -> Expectation
shouldBeInvalid :: (Show a, Validity a) => a -> Expectation

-- | A spec for properties of <a>GenValid</a> and <a>GenInvalid</a>
--   instances.
--   
--   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> or
--   <tt>genInvalid</tt>.
--   
--   <b>It is not a good idea to use this function if invalid values are
--   broken in such a way that <a>Show</a> or even <a>isValid</a> is
--   broken.</b> In that case you probably want <a>genValidSpec</a>.
--   
--   Example usage:
--   
--   <pre>
--   genValiditySpec @Int
--   </pre>
genValiditySpec :: forall a. (Typeable a, Show a, GenValid a, GenInvalid a) => Spec

-- | 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 :: forall a. (Typeable a, Show a, GenValid a) => Spec

-- | A <tt>Spec</tt> that specifies that <tt>genInvalid</tt> only generates
--   invalid data.
--   
--   Note that it is not a good idea to use this function if invalid values
--   are broken in such a way that <a>Show</a> or even <a>isValid</a> is
--   broken.
--   
--   Example usage:
--   
--   <pre>
--   genInvalidSpec @Rational
--   </pre>
genInvalidSpec :: forall a. (Typeable a, Show a, GenInvalid 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 :: forall a. (Show a, GenValid a) => Property

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

-- | <tt>genValid</tt> only generates invalid data
--   
--   <pre>
--   genInvalidGeneratesInvalid @Rational
--   </pre>
--   
--   <pre>
--   genInvalidGeneratesInvalid @Rational
--   </pre>
--   
--   <pre>
--   genInvalidGeneratesInvalid @(Maybe Rational)
--   </pre>
--   
--   <pre>
--   genInvalidGeneratesInvalid @[Rational]
--   </pre>
genInvalidGeneratesInvalid :: forall a. (Show a, GenInvalid a) => Property

-- | The given generator generates only invalid data points
genGeneratesInvalid :: (Show a, Validity a) => Gen a -> Property
shrinkValiditySpec :: forall a. (Show a, Eq a, Typeable a, GenValid a, GenInvalid a) => Spec
shrinkValidSpec :: forall a. (Show a, Eq a, Typeable a, GenValid a) => Spec
shrinkValidSpecWithLimit :: forall a. (Show a, Eq a, Typeable a, GenUnchecked a, GenValid a) => Int -> Spec
shrinkInvalidSpec :: forall a. (Show a, Typeable a, GenInvalid a) => Spec
shrinkValidPreservesValidOnGenValid :: forall a. (Show a, GenValid a) => Property
shrinkInvalidPreservesInvalidOnGenInvalid :: forall a. (Show a, GenInvalid a) => Property

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

-- | <pre>
--   shrinkPreservesInvalidOnGenInvalid ((:[]) :: Rational -&gt; [Rational])
--   </pre>
shrinkPreservesInvalidOnGenInvalid :: (Show a, GenInvalid a) => (a -> [a]) -> Property

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

shrinkInvalidPreservesInvalid :: (Show a, GenInvalid 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>
--   shrinkingStaysInvalid (pure (1/0) :: Gen Double) (:[])
--   </pre>
shrinkingStaysInvalid :: (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 :: forall a. (Typeable a, Show a, Validity a, Arbitrary a) => Spec

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

-- | A <tt>Spec</tt> that specifies that <tt>isValidFor</tt> implies
--   <tt>isValid</tt>
--   
--   In general it is a good idea to add this spec to your test suite if
--   the <tt>a</tt> and <tt>b</tt> in <tt>RelativeValidity a b</tt> also
--   have a <tt>Validity</tt> instance.
--   
--   Example usage:
--   
--   <pre>
--   relativeValiditySpec @MyDataFor @MyOtherData
--   </pre>
relativeValiditySpec :: forall a b. (Typeable a, Typeable b, Show a, Show b, Validity a, Validity b, GenUnchecked a, GenUnchecked b, RelativeValidity a b) => Spec

-- | <tt>isValidFor a b</tt> implies <tt>isValid a</tt> for all <tt>b</tt>
relativeValidityImpliesValidA :: forall a b. (Show a, Show b, Validity a, GenUnchecked a, GenUnchecked b, RelativeValidity a b) => Property

-- | <tt>isValidFor a b</tt> implies <tt>isValid b</tt> for all <tt>a</tt>
relativeValidityImpliesValidB :: forall a b. (Show a, Show b, Validity b, GenUnchecked a, GenUnchecked b, RelativeValidity a b) => Property

-- | A <tt>Spec</tt> that specifies that <tt>genValidFor</tt> and
--   <tt>genInvalidFor</tt> work as intended.
--   
--   In general it is a good idea to add this spec to your test suite if
--   you write a custom implementation of <tt>genValidFor</tt> or
--   <tt>genInvalidFor</tt>.
--   
--   Example usage:
--   
--   <pre>
--   relativeGenValiditySpec @MyDataFor @MyOtherData
--   </pre>
genRelativeValiditySpec :: forall a b. (Typeable a, Typeable b, Show a, Show b, GenUnchecked b, GenValid b, GenRelativeValid a b, GenRelativeInvalid a b) => Spec

-- | <tt>genValidFor b</tt> only generates values that satisfy
--   <tt>isValidFor b</tt>
genRelativeValidGeneratesValid :: forall a b. (Show a, Show b, GenValid b, RelativeValidity a b, GenRelativeValid a b) => Property

-- | <tt>genInvalidFor b</tt> only generates values that do not satisfy
--   <tt>isValidFor b</tt>
genRelativeInvalidGeneratesInvalid :: forall a b. (Show a, Show b, GenUnchecked b, RelativeValidity a b, GenRelativeInvalid a b) => 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>
producesValidsOnValids :: (Show a, Show b, GenValid a, Validity b) => (a -> b) -> Property

-- | The function produces valid output when the input is generated by
--   <tt>genUnchecked</tt>
producesValid :: (Show a, Show b, GenUnchecked 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
producesValidsOnValids2 :: (Show a, Show b, Show c, GenValid a, GenValid b, Validity c) => (a -> b -> c) -> Property
producesValid2 :: (Show a, Show b, Show c, GenUnchecked a, GenUnchecked 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
producesValidsOnValids3 :: (Show a, Show b, Show c, Show d, GenValid a, GenValid b, GenValid c, Validity d) => (a -> b -> c -> d) -> Property
producesValid3 :: (Show a, Show b, Show c, Show d, GenUnchecked a, GenUnchecked b, GenUnchecked 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 b, 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>
succeedsOnValid :: (Show a, Show b, Show (f b), GenValid a, CanFail f) => (a -> f b) -> Property

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

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

-- | The function fails if the input is generated by <tt>genInvalid</tt>
failsOnInvalid :: (Show a, Show b, Show (f b), GenInvalid a, CanFail f) => (a -> f b) -> Property
failsOnGens2 :: (Show a, Show b, Show c, Show (f c), CanFail f) => (a -> b -> f c) -> Gen a -> (a -> [a]) -> Gen b -> (b -> [b]) -> Property
failsOnInvalid2 :: (Show a, Show b, Show c, Show (f c), GenUnchecked a, GenUnchecked b, GenInvalid a, GenInvalid b, CanFail f) => (a -> b -> f c) -> 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, Show (f 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>.
validIfSucceedsOnValid :: (Show a, Show b, Show (f b), GenValid 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>arbitrary</tt>.
validIfSucceedsOnArbitrary :: (Show a, Show b, Show (f 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>genUnchecked</tt>.
validIfSucceeds :: (Show a, Show b, Show (f b), GenUnchecked a, Validity b, CanFail f) => (a -> f b) -> Property
validIfSucceedsOnGens2 :: (Show a, Show b, Show c, Show (f c), Validity c, CanFail f) => (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
validIfSucceedsOnValids2 :: (Show a, Show b, Show c, Show (f c), GenValid a, GenValid b, Validity c, CanFail f) => (a -> b -> f c) -> Property
validIfSucceeds2 :: (Show a, Show b, Show c, Show (f c), GenUnchecked a, GenUnchecked b, Validity c, CanFail f) => (a -> b -> f c) -> Property
validIfSucceedsOnArbitrary2 :: (Show a, Show b, Show c, Show (f c), Arbitrary a, Arbitrary b, Validity c, CanFail f) => (a -> b -> f c) -> Property
validIfSucceedsOnGens3 :: (Show a, Show b, Show c, Show d, Show (f d), Validity d, CanFail f) => (a -> b -> c -> f d) -> Gen (a, b, c) -> ((a, b, c) -> [(a, b, c)]) -> Property
validIfSucceedsOnValids3 :: (Show a, Show b, Show c, Show d, Show (f d), GenValid a, GenValid b, GenValid c, Validity d, CanFail f) => (a -> b -> c -> f d) -> Property
validIfSucceeds3 :: (Show a, Show b, Show c, Show d, Show (f d), GenUnchecked a, GenUnchecked b, GenUnchecked c, Validity d, CanFail f) => (a -> b -> c -> f d) -> Property
validIfSucceedsOnArbitrary3 :: (Show a, Show b, Show c, Show d, Show (f d), Arbitrary a, Arbitrary b, Arbitrary c, Validity d, CanFail f) => (a -> b -> c -> f d) -> Property
equivalentOnGen :: (Show a, Eq a, Show b, Eq b) => (a -> b) -> (a -> b) -> Gen a -> (a -> [a]) -> Property
equivalentOnValid :: (Show a, Eq a, GenValid a, Show b, Eq b) => (a -> b) -> (a -> b) -> Property
equivalent :: (Show a, Eq a, GenUnchecked a, Show b, Eq b) => (a -> b) -> (a -> b) -> Property

-- | <pre>
--   equivalentOnArbitrary ((* 2) . (+ 1)) ((+ 2) . (* 2) :: Int -&gt; Int)
--   </pre>
equivalentOnArbitrary :: (Show a, Eq 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
equivalentOnValids2 :: (Show a, GenValid a, Show b, GenValid b, Show c, Eq c) => (a -> b -> c) -> (a -> b -> c) -> Property
equivalent2 :: (Show a, GenUnchecked a, Show b, GenUnchecked 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
equivalentOnValids3 :: (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
equivalent3 :: (Show a, GenUnchecked a, Show b, GenUnchecked b, Show c, GenUnchecked 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, Eq a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Gen a -> (a -> [a]) -> Property
equivalentWhenFirstSucceedsOnValid :: (Show a, Eq a, GenValid a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Property
equivalentWhenFirstSucceeds :: (Show a, Eq a, GenUnchecked a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Property
equivalentWhenFirstSucceedsOnArbitrary :: (Show a, Eq a, Arbitrary a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> b) -> Property
equivalentWhenFirstSucceedsOnGens2 :: (Show a, Eq a, Show b, Eq b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalentWhenFirstSucceedsOnValids2 :: (Show a, Eq a, GenValid a, Show b, Eq b, GenValid b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Property
equivalentWhenFirstSucceeds2 :: (Show a, Eq a, GenUnchecked a, Show b, Eq b, GenUnchecked b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Property
equivalentWhenFirstSucceedsOnArbitrary2 :: (Show a, Eq a, Arbitrary a, Show b, Eq b, Arbitrary b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> c) -> Property
equivalentWhenSecondSucceedsOnGen :: (Show a, Eq a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Gen a -> (a -> [a]) -> Property
equivalentWhenSecondSucceedsOnValid :: (Show a, Eq a, GenValid a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Property
equivalentWhenSecondSucceeds :: (Show a, Eq a, GenUnchecked a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Property
equivalentWhenSecondSucceedsOnArbitrary :: (Show a, Eq a, Arbitrary a, Show b, Eq b, CanFail f) => (a -> b) -> (a -> f b) -> Property
equivalentWhenSecondSucceedsOnGens2 :: (Show a, Eq a, Show b, Eq b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalentWhenSecondSucceedsOnValids2 :: (Show a, Eq a, GenValid a, Show b, Eq b, GenValid b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Property
equivalentWhenSecondSucceeds2 :: (Show a, Eq a, GenUnchecked a, Show b, Eq b, GenUnchecked b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Property
equivalentWhenSecondSucceedsOnArbitrary2 :: (Show a, Eq a, Arbitrary a, Show b, Eq b, Arbitrary b, Show c, Eq c, CanFail f) => (a -> b -> c) -> (a -> b -> f c) -> Property
equivalentWhenSucceedOnGen :: (Show a, Eq a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Gen a -> (a -> [a]) -> Property
equivalentWhenSucceedOnValid :: (Show a, Eq a, GenValid a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Property
equivalentWhenSucceed :: (Show a, Eq a, GenUnchecked a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Property
equivalentWhenSucceedOnArbitrary :: (Show a, Eq a, Arbitrary a, Show b, Eq b, CanFail f) => (a -> f b) -> (a -> f b) -> Property
equivalentWhenSucceedOnGens2 :: (Show a, Eq a, Show b, Eq b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> f c) -> Gen (a, b) -> ((a, b) -> [(a, b)]) -> Property
equivalentWhenSucceedOnValids2 :: (Show a, Eq a, GenValid a, Show b, Eq b, GenValid b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> f c) -> Property
equivalentWhenSucceed2 :: (Show a, Eq a, GenUnchecked a, Show b, Eq b, GenUnchecked b, Show c, Eq c, CanFail f) => (a -> b -> f c) -> (a -> b -> f c) -> Property
equivalentWhenSucceedOnArbitrary2 :: (Show a, Eq a, Arbitrary a, Show b, Eq 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
inverseFunctionsOnValid :: (Show a, Eq a, GenValid a) => (a -> b) -> (b -> a) -> Property
inverseFunctions :: (Show a, Eq a, GenUnchecked 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
inverseFunctionsIfFirstSucceedsOnValid :: (Show a, Eq a, GenValid a, CanFail f) => (a -> f b) -> (b -> a) -> Property
inverseFunctionsIfFirstSucceeds :: (Show a, Eq a, GenUnchecked 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
inverseFunctionsIfSecondSucceedsOnValid :: (Show a, Eq a, GenValid a, CanFail f) => (a -> b) -> (b -> f a) -> Property
inverseFunctionsIfSecondSucceeds :: (Show a, Eq a, GenUnchecked 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
inverseFunctionsIfSucceedOnValid :: (Show a, Eq a, GenValid a, CanFail f, CanFail g) => (a -> f b) -> (b -> g a) -> Property
inverseFunctionsIfSucceed :: (Show a, Eq a, GenUnchecked 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
idempotentOnValid :: (Show a, Eq a, GenValid a) => (a -> a) -> Property
idempotent :: (Show a, Eq a, GenUnchecked 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>
--   reflexivityOnValid ((&lt;=) :: Rational -&gt; Rational -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnValid ((==) :: Rational -&gt; Rational -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnValid ((&gt;=) :: Rational -&gt; Rational -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnValid (Data.List.isPrefixOf :: [Rational] -&gt; [Rational] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnValid (Data.List.isSuffixOf :: [Rational] -&gt; [Rational] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   reflexivityOnValid (Data.List.isInfixOf :: [Rational] -&gt; [Rational] -&gt; Bool)
--   </pre>
reflexivityOnValid :: (Show a, GenValid a) => (a -> a -> Bool) -> 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, GenUnchecked 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>
--   transitivityOnValid ((&gt;) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid ((&gt;=) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid ((==) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid ((&lt;=) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid ((&lt;) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid (Data.List.isPrefixOf :: [Double] -&gt; [Double] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid (Data.List.isSuffixOf :: [Double] -&gt; [Double] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   transitivityOnValid (Data.List.isInfixOf :: [Double] -&gt; [Double] -&gt; Bool)
--   </pre>
transitivityOnValid :: (Show a, GenValid a) => (a -> a -> Bool) -> 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, GenUnchecked 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>
--   antisymmetryOnValid ((&gt;) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnValid ((&gt;=) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnValid ((&lt;=) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnValid ((&lt;) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnValid (Data.List.isPrefixOf :: [Double] -&gt; [Double] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnValid (Data.List.isSuffixOf :: [Double] -&gt; [Double] -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antisymmetryOnValid (Data.List.isInfixOf :: [Double] -&gt; [Double] -&gt; Bool)
--   </pre>
antisymmetryOnValid :: (Show a, Eq a, GenValid a) => (a -> a -> Bool) -> 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, GenUnchecked 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>
--   antireflexivityOnValid ((&lt;) :: Rational -&gt; Rational -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antireflexivityOnValid ((/=) :: Rational -&gt; Rational -&gt; Bool)
--   </pre>
--   
--   <pre>
--   antireflexivityOnValid ((&gt;) :: Rational -&gt; Rational -&gt; Bool)
--   </pre>
antireflexivityOnValid :: (Show a, GenValid a) => (a -> a -> Bool) -> 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, GenUnchecked 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>
--   symmetryOnValid ((==) :: Double -&gt; Double -&gt; Bool)
--   </pre>
--   
--   <pre>
--   symmetryOnValid ((/=) :: Double -&gt; Double -&gt; Bool)
--   </pre>
symmetryOnValid :: (Show a, GenValid a) => (a -> a -> Bool) -> Property

-- | <pre>
--   symmetry ((==) :: Int -&gt; Int -&gt; Bool)
--   </pre>
--   
--   <pre>
--   symmetry ((/=) :: Int -&gt; Int -&gt; Bool)
--   </pre>
symmetry :: (Show a, GenUnchecked 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>
--   leftIdentityOnValid (flip ((^) :: Rational -&gt; Int -&gt; Rational)) 1
--   </pre>
leftIdentityOnValid :: (Show a, Eq a, GenValid a) => (b -> a -> a) -> b -> Property

-- | <pre>
--   leftIdentity (flip ((^) :: Int -&gt; Int -&gt; Int)) 1
--   </pre>
leftIdentity :: (Show a, Eq a, GenUnchecked 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>
--   rightIdentityOnValid ((^) :: Rational -&gt; Int -&gt; Rational) 1
--   </pre>
rightIdentityOnValid :: (Show a, Eq a, GenValid a) => (a -> b -> a) -> b -> Property

-- | <pre>
--   rightIdentity ((^) :: Int -&gt; Int -&gt; Int) 1
--   </pre>
rightIdentity :: (Show a, Eq a, GenUnchecked 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>
--   identityOnValid ((*) :: Rational -&gt; Rational -&gt; Rational) 1
--   </pre>
--   
--   <pre>
--   identityOnValid ((+) :: Rational -&gt; Rational -&gt; Rational) 0
--   </pre>
identityOnValid :: (Show a, Eq a, GenValid a) => (a -> 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, GenUnchecked 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
associativeOnValids :: (Show a, Eq a, GenValid 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, GenUnchecked 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, Eq a) => (a -> a -> a) -> Gen (a, a) -> ((a, a) -> [(a, a)]) -> Property

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

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

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

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

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

-- | Standard test spec for properties of Show and Read instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   showReadSpecOnArbitrary @Double
--   </pre>
showReadSpecOnArbitrary :: forall a. (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 :: forall a. (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>
--   eqSpecOnValid @Double
--   </pre>
eqSpecOnValid :: forall a. (Show a, Eq a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Eq instances for invalid values
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnInvalid @Double
--   </pre>
eqSpecOnInvalid :: forall a. (Show a, Eq a, Typeable a, GenInvalid a) => Spec

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

-- | Standard test spec for properties of Eq instances for arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   eqSpecOnArbitrary @Int
--   </pre>
eqSpecOnArbitrary :: forall a. (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 :: forall a. (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 :: forall a. (Show a, Eq 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>
--   ordSpecOnValid @Double
--   </pre>
ordSpecOnValid :: forall a. (Show a, Ord a, Typeable a, GenValid a) => Spec

-- | Standard test spec for properties of Ord instances for invalid values
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnInvalid @Double
--   </pre>
ordSpecOnInvalid :: forall a. (Show a, Ord a, Typeable a, GenInvalid a) => Spec

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

-- | Standard test spec for properties of Ord instances for arbitrary
--   values
--   
--   Example usage:
--   
--   <pre>
--   ordSpecOnArbitrary @Int
--   </pre>
ordSpecOnArbitrary :: forall a. (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>
--   monoidSpecOnValid @[Double]
--   </pre>
monoidSpecOnValid :: forall a. (Show a, Eq a, Monoid a, Typeable a, GenValid a) => Spec

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

-- | Standard test spec for properties of <a>Monoid</a> instances for
--   arbitrary values
--   
--   Example usage:
--   
--   <pre>
--   monoidSpecOnArbitrary @[Int]
--   </pre>
monoidSpecOnArbitrary :: forall a. (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 :: forall a. (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>
functorSpecOnValid :: forall (f :: * -> *). (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 GenUnchecked instances
--   
--   Example usage:
--   
--   <pre>
--   functorSpecOnArbitrary @[]
--   </pre>
functorSpec :: forall (f :: * -> *). (Eq (f Int), Show (f Int), Functor f, Typeable f, GenUnchecked (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 :: * -> *). (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>
applicativeSpecOnValid :: forall (f :: * -> *). (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 GenUnchecked instances
--   
--   Example usage:
--   
--   <pre>
--   applicativeSpecOnArbitrary @[]
--   </pre>
applicativeSpec :: forall (f :: * -> *). (Eq (f Int), Show (f Int), Applicative f, Typeable f, GenUnchecked (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 :: * -> *). (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 :: *). (Show a, Eq 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>
--   monadSpecOnValid @[]
--   </pre>
monadSpecOnValid :: forall (f :: * -> *). (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 GenUnchecked instances
--   
--   Example usage:
--   
--   <pre>
--   monadSpec @[]
--   </pre>
monadSpec :: forall (f :: * -> *). (Eq (f Int), Show (f Int), Monad f, Typeable f, GenUnchecked (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 :: * -> *). (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, Eq 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
