Multi-parameter type classes
Classes take one or more arguments, becoming relations between types. See also the dilemma they cause.
The mtl package of the Haskell hierarchical libraries utilizes this feature. The base package contains only two such classes:
class HasBounds a => IArray a e class (HasBounds a, Monad m) => MArray a e m
There are FlexibleInstances
instance IArray Array e instance IArray UArray Bool instance IArray UArray Char ...
but no OverlappingInstances.
- Type classes: exploring the design space by Simon Peyton Jones, Mark Jones and Erik Meijer, Haskell Workshop 1997.
- offered by GHC and Hugs for years
- express more interesting relationships