The lazysmallcheck package

Lazy SmallCheck is a library for exhaustive, demand-driven testing of
Haskell programs. It is based on the idea that if a property holds
for a partially-defined input then it must also hold for all
fully-defined refinements of the that input. Compared to `eager'
input generation as in SmallCheck, Lazy SmallCheck may require
significantly fewer test-cases to verify a property for all inputs up
to a given depth.