Representing layered monads
Computational lambda-calculus and monads