Enumerated types
An enumerated type is a nominal, heterogeneous disjoint union type, denoted
by the name of an enum item. 1
An enum item declares both the type and a number of variants, each of
which is independently named and has the syntax of a struct, tuple struct or
unit-like struct.
New instances of an enum can be constructed in an enumeration variant
expression.
Any enum value consumes as much memory as the largest variant for its
corresponding enum type, as well as the size needed to store a discriminant.
Enum types cannot be denoted structurally as types, but must be denoted by
named reference to an enum item.
The enum type is analogous to a data constructor declaration in
ML, or a pick ADT in Limbo.