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


-- | Standard properties for functions on `Validity` types
--   
--   Standard properties for functions on <a>Validity</a> types
@package genvalidity-property
@version 0.3.0.0


-- | Standard tests involving validity
module Test.Validity.Functions.Idempotence
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


-- | Tests for GenValidity instances
module Test.Validity.GenValidity.Property

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

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

module Test.Validity.Operations.Associativity

-- | &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

module Test.Validity.Operations.Commutativity

-- | &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

module Test.Validity.Operations.Identity

-- | &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


-- | Properties of operations
module Test.Validity.Operations

-- | &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

module Test.Validity.Property.Utils
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
(<==>) :: Bool -> Bool -> Bool
(===>) :: Bool -> Bool -> Bool


-- | Standard tests involving validity
module Test.Validity.Functions.Validity

-- | The function produces valid output when the input is generated as
--   specified by the given generator.
producesValidsOnGen :: forall a b. (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

module Test.Validity.Relations.Antireflexivity

-- | &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

module Test.Validity.Relations.Antisymmetry

-- | &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

module Test.Validity.Relations.Reflexivity

-- | &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

module Test.Validity.Relations.Symmetry

-- | &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

module Test.Validity.Relations.Transitivity

-- | &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


-- | Properties of relations
module Test.Validity.Relations

-- | &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


-- | Tests for shrinking functions
module Test.Validity.Shrinking.Property

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

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

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

shrinkInvalidPreservesInvalid :: forall a. (Show a, GenInvalid a) => Gen a -> Property

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

-- | <pre>
--   shrinkingStaysValidWithLimit (pure 5 :: Gen Double) (\d -&gt; [d - 1, read "NaN"]) 1
--   </pre>
shrinkingStaysValidWithLimit :: forall a. (Show a, Validity a) => Gen a -> (a -> [a]) -> Int -> Property

-- | <pre>
--   shrinkingStaysInvalid (pure (1/0) :: Gen Double) (:[])
--   </pre>
shrinkingStaysInvalid :: forall a. (Show a, Validity a) => Gen a -> (a -> [a]) -> Property

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

-- | <pre>
--   shrinkingPreservesWithLimit (pure 4) (:[]) 100 (== 4)
--   </pre>
shrinkingPreservesWithLimit :: forall a. Show a => Gen a -> (a -> [a]) -> Int -> (a -> Bool) -> Property

-- | <pre>
--   shrinkDoesNotShrinkToItself (shrinkUnchecked :: Double -&gt; [Double])
--   </pre>
shrinkDoesNotShrinkToItself :: forall a. (Show a, Eq a, GenUnchecked a) => (a -> [a]) -> Property

-- | <pre>
--   shrinkDoesNotShrinkToItselfWithLimit (shrinkUnchecked :: Double -&gt; [Double]) 100
--   </pre>
shrinkDoesNotShrinkToItselfWithLimit :: forall a. (Show a, Eq a, GenUnchecked a) => (a -> [a]) -> Int -> Property

-- | <pre>
--   shrinkDoesNotShrinkToItselfOnValid (shrinkValid ::  Rational -&gt; [Rational])
--   </pre>
shrinkDoesNotShrinkToItselfOnValid :: forall a. (Show a, Eq a, GenValid a) => (a -> [a]) -> Property

-- | <pre>
--   shrinkDoesNotShrinkToItselfOnValidWithLimit (shrinkValid :: Rational -&gt; [Rational]) 100
--   </pre>
shrinkDoesNotShrinkToItselfOnValidWithLimit :: forall a. (Show a, Eq a, GenValid a) => (a -> [a]) -> Int -> Property

-- | <pre>
--   shrinkDoesNotShrinkToItselfOnInvalid (shrinkInvalid :: Rational -&gt; [Rational])
--   </pre>
shrinkDoesNotShrinkToItselfOnInvalid :: forall a. (Show a, Eq a, GenInvalid a) => (a -> [a]) -> Property

-- | <pre>
--   shrinkDoesNotShrinkToItselfOnInvalidWithLimit (shrinkInvalid :: Rational -&gt; [Rational]) 100
--   </pre>
shrinkDoesNotShrinkToItselfOnInvalidWithLimit :: forall a. (Show a, Eq a, GenInvalid a) => (a -> [a]) -> Int -> Property

-- | <pre>
--   doesNotShrinkToItself (pure 5 :: Gen Double) shrinkUnchecked
--   </pre>
doesNotShrinkToItself :: forall a. (Show a, Eq a) => Gen a -> (a -> [a]) -> Property

-- | <pre>
--   doesNotShrinkToItselfWithLimit (pure 5 :: Gen Double) shrinkUnchecked 100
--   </pre>
doesNotShrinkToItselfWithLimit :: forall a. (Show a, Eq a) => Gen a -> (a -> [a]) -> Int -> Property

module Test.Validity.Types

-- | A class of types that are the result of functions that can fail
class CanFail f
hasFailed :: CanFail f => f a -> Bool
resultIfSucceeded :: CanFail f => f a -> Maybe a
instance Test.Validity.Types.CanFail GHC.Maybe.Maybe
instance Test.Validity.Types.CanFail (Data.Either.Either e)


-- | Standard tests involving inverse functions
module Test.Validity.Functions.Inverse
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

module Test.Validity.Functions.Equivalence
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
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
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

module Test.Validity.Functions.CanFail

-- | 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), 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


-- | Validity tests involving functions
module Test.Validity.Functions

-- | The function produces valid output when the input is generated as
--   specified by the given generator.
producesValidsOnGen :: forall a b. (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

-- | 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), 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
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
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
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

module Test.Validity.Property
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

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

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

-- | The function produces valid output when the input is generated as
--   specified by the given generator.
producesValidsOnGen :: forall a b. (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
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), 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
