I run into an interesting problem where I want to capture the syntax of a pure function using a monadic language. The monad is necessary to capture binding information. However, is it possible (or necessary) to constrain the expression language such that it can only express pure functions? I.e. make it so that the identity monad is part of the class?