The fundamental definitions for GenCheck.
Throughout GenCheck, structured types are indexed with a (Rank,Count) pair.
These types are used everywhere so are in Base.
type Rank = Int
type Count = Integer
The property type is a function from the test domain to a Boolean, i.e. a
univariate proposition. If the specification property has multiple arguments,
it must first be uncurried to make the test domain the product of the
type Property a = a -> Bool