MultiMethod - an exercise in types and generics.