Making monads first-class with template haskell. - Pericles S. Kariotis; Adam M. Procter; William L. Harrison (Haskell, 2008)