Feat (Functional Enumeration of Algebraic Types) provides
enumerations as functions from natural numbers to values
toEnum but for any algebraic data type). This
can be used for SmallCheck-style systematic testing,
QuickCheck style random testing, and hybrids of the two.
The enumerators are defined in a very boilerplate manner
and there is a Template Haskell script for deriving the
class instance for most types.
Test.Feat contain a subset of the other modules that
should be sufficient for most test usage. There
are some small and large example in the tar
The generators are provided by the size-based package. This means other libraries that implement the Sized class can use the same generator definitions. One such is the lazy-search package, that uses laziness to search for values and test properties. This is typically a lot faster than Feat for properties that have preconditions (logical implication), but can not be used for random selection of values.