Type signature FiniteType
A common signature type that can be used to represent any finite type, including newtypes.
Cannot be used to represent infinite types, such as int or string, but can be used to
represent finite types such as any normal class or algebraic newtype. To support infinite
types in your module, use InfiniteType instead.
Note that newtypes do not have the member predicate toString(). If you need toString() in
your parameterization, you should use FiniteStringableType instead, and your module will no
longer support newtypes.