{#enum cid [as hsid] {alias1 , ... , aliasn}
[with prefix = pref] [deriving (clid1 , ... , clidn)]#}
Rewrite the C enumeration called cid into a Haskell data type
declaration, which is made an instance of Enum such that the ordinals
match those of the enumeration values in C. This takes explicit enumeration
values in the C definitions into account. If hsid is given, this is
the name of the Haskell data type. The identifiers clid1 to clidn
are added to the deriving clause of the Haskell type.
By default, the names of the C enumeration are used for the constructors in
Haskell. If alias1 is underscoreToCase, the original C names are
capitalised and the use of underscores is rewritten to caps. If it is
upcaseFirstLetter or downcaseFirstLetter, the first letter of the
original C name changes case correspondingly. It is also possible to combine
underscoreToCase with one of upcaseFirstLetter or
downcaseFirstLetter. Moreover, alias1 to aliasn may be aliases
of the form cid as hsid, which map individual C names to
Haskell names. Instead of the global prefix introduced by a context hook, a
local prefix pref can optionally be specified.
As an example, consider
{#enum WindowType {underscoreToCase} deriving (Eq)#}
Note: The enum define hooks described in the C->Haskell paper are
not implemented yet.