Units and mixins also have a nice synergy, too. If you've not seen
Matthew's and my paper from ICFP 1998, you might want to check it out:
http://www.cs.utah.edu/plt/publications/icfp98-ff/
It describes how to build a datatype that is extensible both with new
functions and new variants, using units and mixins. By mixins I mean a
particular use of mzscheme's class system. Since classes are values in
mzscheme, one can build a procedure that returns a subclass of its
input argument. That kind of procedure is what we mean by mixin.
We use a slightly more complex form of this pattern in DrScheme to
define the languages that DrScheme supports (ie, those listed in the
languages dialog). That's described in more detail in DrScheme's Tools
manual.
Robby