C# implementation of the evaluator in Philip Wadler's "Monads for functional programming" paper