Derived instance declarations for the class Ix are only possible
for enumerations (i.e. datatypes having only nullary constructors)
and single-constructor datatypes, including arbitrarily large tuples,
whose constituent types are instances of Ix.

For an enumeration, the nullary constructors are assumed to be
numbered left-to-right with the indices being 0 to n-1 inclusive. This
is the same numbering defined by the Enum class. For example, given
the datatype: