Zero-dependency library for writing parsers in a concise functional style & with exhaustive error-reporting.
Kinds of errors are distinguished via a user-defined Expectation type, which signals what did
a parser expect.
A [ParsingError] can also have no expectation, which will mean that the error is recoverable.
Some built-in parsers can have Infallible as their expectation, which means that any error
the parser may ever return is recoverable.
The distinction between recoverable & fatal errors is important for parsers that need to try
multiple options.
Error reporting with precise location in the source is facilitated by methods such as
[Parser::parse_with_err_loc], [ParsingError::with_src_loc]