Type signature InfiniteType
A common signature type that can be used to represent any possibly infinite type, including
int and string, as well as any normal class or algebraic newtype.
Generally, using this type and supporting infinite types will constrain options in your module
design. For this reason, it is often preferable to use one of the finite types FiniteType or
FiniteStringableType instead, unless you specifically need to support infinite types in your
module.
Note that newtypes do not have the member predicate toString(). If you need toString() in
your parameterization, you should use InfiniteStringableType instead, and your module will no
longer support newtypes.