Now using T4 to generate the monad combinators