Download: Categories v0.1
Categories is an experimental object system, created to explore separating representation, behavior, and taxonomy into orthogonal parts.
Categories v0.1 is a preliminary version of Categories with the following features:
It's written in R5RS Scheme, with the intention that it should work in any R5RS-compliant implementation.
It provides most, but not all, of the defined features of Categories, including user-defined structure data types, polymorphic functions with multiple dispatch, and user-programable dispatching.
It includes an example implementation of the -flat- domain.
The R5RS implementation is simple, and not particularly efficient. With luck, though, it's small enough and portable enough that anyone who cares can make a more efficient implementation that takes advantage of some particular Scheme's features.
This release comes with just one domain: -flat-. The -flat- domain provides polymorphic functions and multiple dispatch, but no inheritance. I plan an additional release that will include two more domains: the -c3- domain will provide multiple inheritance and dispatch that uses the C3 class-linearization algorithm (see this paper for more about C3); the -pred- domain will provide predicate dispatch with C3 linearization of predicates.
Past that, I also plan a release of Categories for Gambit that takes advantage of some Gambit-specific features to make things faster and more convenient, and a release of Categories for Clojure.