basic combinators rewritten using monad

this goes to page 11 of the paper

still more refac needed - look at Haskell's Parsec 3.0