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 with a struct expression.
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.