An enumerated type is a nominal, heterogeneous disjoint union type, denoted
by the name of an
enum item. [^enumtype]
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
New instances of an
enum can be constructed in an enumeration variant
enum value consumes as much memory as the largest variant for its
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 type is analogous to a
data constructor declaration in
ML, or a pick ADT in Limbo.