[R6RS] Enumerations proposal pre-draft

Michael Sperber sperber at informatik.uni-tuebingen.de
Sun Apr 23 06:31:54 EDT 2006

Having read Will's proposal, I still prefer an enumerations mechanism
that introduces new types for enumerations.  I only summarized the
rationale on the phone, so I figured it might be a good idea to write
it up.  (As always, all remarks referring to optimizing compilation
are relative to my limited knowledge.  Please correct me where I'm

- Writing (color purple) makes it explicit what enumeration the color
  comes from.  We could use some convention for symbol naming, but the
  proposal codifies the convention, and forces people to use it.

- Macro expansion performs a certain degree of static checking in that
  it will often find typos.  I.e., (color purpel) will raise an
  expansion-time error, whereas 'purpel will not.

- Having a new type allows for very fast dynamic type checking.
  Moreover, I suspect that it at least simplifies compile-time
  checking for compilers that already have the infrastructure for
  tracking record types through their flow analyses, but not sets of

- The mapping to integers is much faster than with symbols.  This
  could also be exploited to produce very fast code for a case
  distinction, via tables or binary search.  (This may also be
  possible for symbols, but I don't see how.)  This might justify
  adding an enum-case form that allows you to do this:

(enum-case c color
  ((purple blue) 'bluish)
  ((red orange) 'reddish)
  (else 'ugly))

  It also enables a straightforward and fast implementation of enum
  sets via bit strings.  (Of course, that's possible for symbols as
  well, but you always have to figure out the indices.)

- This extends straightforwardly to finite types, where more fields
  can be added to the enumeration values.  See the description of
  `define-finite-type' here:


Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla

More information about the R6RS mailing list