Employ `catMaybes` and `filter`
Employ `catMaybes` and `filter`

The semantics are there now, but the error reporting is left to be
desired as any failure now results in "No branch matches". We must
use a custom fold over `xs` that re-invents `<|>` for parsers, such
that both errors and results are captured. Then, upon failure, an
error can be chosen, maybe even per some criteria: I.e. the left-most
branch or the longest/shortest branch, etc. Scoring selection would not
change. It would be great to have more control over the type of errors
the parser uses, so we could fail with a score.

felixSchl/neodoc,felixSchl/neodoc,felixSchl/neodoc