What the heck is a parser-combinator?