Multi-parameter versions of typical typeclasses in Haskell