scheme-interpreter-scala "If you wish to implement parser combinators from scratch, you must first invent monad transformers."