Haxe provides powerful enumeration (short: enum) types, which are actually an algebraic data type (ADT). While they cannot have any expressions, they are very useful for describing data structures:
enum Color { Red; Green; Blue; Rgb(r:Int, g:Int, b:Int); }
Semantically, this enum describes a color which is either red, green, blue or a specified RGB value. The syntactic structure is as follows:
enum
denotes that we are declaring an enum.Color
is the name of the enum and could be anything conforming to the rules for type identifiers.{}
are the enum constructors,Red
, Green
, and Blue
taking no arguments,Rgb
taking three Int
arguments named r
, g
and b
.The Haxe type system provides a type which unifies with all enum types:
Define:
Enum<T>
This type is compatible with all enum types. At compile-time,
Enum<T>
can be seen as the common base type of all enum types. However, this relation is not reflected in generated code.