Monads expressed in OOP (code and solutions to exercises from Eric Lippert's blog)