Zero-dependency library with no-std support for writing parsers in a concise functional style & with rich error-reporting.
Every parser is a function that maps an [Input]. Parsers can match on [Pattern]s.
The basic form of the function is
use ;
If the parser is infallible, i.e. never returns an unrecoverable error, it's customary to make it generic over the reason type, to make combining it easier.
Kinds of errors are distinguished via a user-defined Reason type, which signals what did
a parser expect.
A [ParsingError] can also have no reason, which will mean that the error is recoverable.
Some built-in parsers can have [core::convert::Infallible] as their error reason,
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
constructing a [FullParsingError] with methods such as
[Parser::with_full_error], [ParsingError::with_src_loc]