Type classes elegantly allow the bringing together of both parametric and ad-hoc polymorphism. Functions with different implementations, different type signatures, but the same name can be both sensibly dispatched to depending on the data they're called on (ad-hoc polymorphism), and these functions can be composed and combined in ways agnostic to the underlying implementations, allowing the creation of functions that use the same implementation on different types (parametric polymorphism).
Type classes allow the definition of pseudo-data-types, defined by the named operations they support. Types can be expressed in terms of their capabilities, rather than in terms of their name - or as in object oriented programming, their ancestry.
While this is fantastically useful for statically typed languages, can type classes add utility to dynamically typed languages? Sadly the size of the set of all dynamically typed languages precludes a thorough examination in 1,000 words, leading to the choice to study how Perl h