    [NAME]
    ALL.misc.comparison.enumsym

    [TITLE]
    Enum Symbols (C++,Ruby)

    [DESCRIPTION]

    Dao supports a data type that is roughly a combination of C++ enum and Ruby symbol
    types. Like in C++, enum symbol in Dao can be declared in the following way,

       1  enum Boolean { False, True }

    And zero will be associated with False and one will be associated with True.

    But unlike in C++, this will not add integer constants named False and True to the
    current namespace, so they have to be accessed in the following way,

       1  bl1 = Boolean::False
       2  bl2 = Boolean::True

    To use False and True as integer constants as in C++, one may do,

       1  use enum Boolean
       2  bl3 = True

    However, the more convenient way to use this type is to use them as symbols. A symbol is
    an identifier prefixed with a dollar symbol. A symbol is a like a "polymorphic" enum:it
    can be used freely without being fixed to a particular enum type, but its actually value
    will depend on the type of the variable that holds it.

    For example,

       1  enum EnumRF{ Real, False }
       2
       3  A = $False
       4
       5  B : Boolean = $False
       6  C : EnumRF  = $False

    Here A will hold a free symbol $False with value zero. And B will hold a symbol $False
    of type Boolean with value zero. And C will hold a symbol $False of type EnumRF with
    value one.

    The main difference between Dao enum symbol and C++ enum and Ruby symbol is this
    polymophic behavior of Dao enum symbol.