look no further.. the plt-match.ss actually has this kind of stuff, at least the pattern matching associated to algebraic types. and i think it is extensible. http://download.plt-scheme.org/doc/371/html/mzlib/mzlib-Z-H-34.html http://en.wikipedia.org/wiki/Algebraic_data_type "In computer programming, an algebraic data type is a datatype each of whose values is data from other datatypes wrapped in one of the constructors of the datatype. Any wrapped data is an argument to the constructor. In contrast to other datatypes, the constructor is not executed and the only way to operate on the data is to unwrap the constructor using pattern matching."