lexString fetches the next whitespace delimited token from
from the input and checks if it matches the ByteString input.
Uses Maybe inside ParserM to handle failed matches, so
that it always returns () on success.

This is a highly optimized way to read lines that start with a
particular character. To implement this efficiently we need access
to the parser's internal state. If this is implemented in terms of
the other primitives for the parser it requires us to consume one
character at a time. That leads to (>>=) wasting significant
time.

This is a highly optimized way to read lines that start with a
particular character, and stops when it reaches a particular |
character. See linesStartingWith for details on why this |
defined here as a primitive.