ParseError s e represents a parse error parametrized
over the stream type
s and the custom data
e.
Semigroup and
Monoid instances of the data type allow us
to merge parse errors from different branches of parsing. When merging
two
ParseErrors, the longest match is preferred; if positions
are the same, custom data sets and collections of message items are
combined. Note that fancy errors take precedence over trivial errors
in merging.