This presentation shows a technique based on relative monads that allows one to embed generic syntax involving a monad, m, which can then be simply reused for any relative monad, relative to m.
It shows a simplified example of a production use of this at CBA (converted to Haskell), which has allowed us to cheaply add error handling to new monads and the theory behind it. It also compares this approach with monad transformers/mtl.
This presentation was delivered at the Yow! Lambda Jam conference in Brisbane, Australia in May, 2015.