use liftA2 to merge parsers