By "error recovery," do you mean backtracking? If so, there are several ways of doing that, which can be found here:
https://hackage.haskell.org/package/parsers-0.12.2.1/docs/Te...
See the 'choice', 'option', and 'try' combinators, and also the '<|>' operator in Control.Applicative.
If you need more than that, you can extend parsers' monadic parsing to roll your own error recovery.
Currently, the best way to understand how parsers and trifecta work is to look at projects that use them. I will give you some links to the ones I've used and found helpful, if a bit more complicated than the parsers I am currently writing:
https://github.com/ekmett/ermine/tree/master/src/Ermine
https://github.com/idris-lang/Idris-dev/tree/master/src/Idri...
And here is a relevant Reddit thread, which includes a link to Edward Kmett's slide deck which motivates trifecta/parsers and gives a high-level view of how they work:
https://www.reddit.com/r/haskell/comments/2uc6kp/are_there_a...
I hope this helps!