monads
parser as monad