I recently discovered this little scala example called Simple interpreter using monads:
object simpleInterpreter { case class M[A](value: A) {
Using a monad makes the parser/interpreter extensible. This paper by Philip Wadler takes some time to read, but explores this idea in great detail. See also Monadic Parsing in Haskell.