Monad classes using type families, with instances for various monad
transformers, inspired by the paper "Functional Programming with Overloading
and Higher-Order Polymorphism", by Mark P Jones, in Advanced School of
Functional Programming, 1995
(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).