These types do things such as restricting the kind of test data that can be generated.
They can be pattern-matched on in properties as a stylistic
alternative to using explicit quantification.
Note: the contents of this module are re-exported by
Test.QuickCheck. You do not need to import it directly.
Examples:
-- Functions cannot be shown (but see Test.QuickCheck.Function)
prop_TakeDropWhile (Blind p) (xs :: [A]) =
takeWhile p xs ++ dropWhile p xs == xs
prop_TakeDrop (NonNegative n) (xs :: [A]) =
take n xs ++ drop n xs == xs
-- cycle does not work for empty lists
prop_Cycle (NonNegative n) (NonEmpty (xs :: [A])) =
take n (cycle xs) == take n (xs ++ cycle xs)