Enum typechecks as a datatype but compiles down to the represnetaion of desired integer (or integer-like) values. This is a special case of Shared Subtypes. — http://portal.acm.org/citation.cfm?id=1411297