Implementing monads with operational semantics
