In my experience using Parsec, it was extremely slow.
Took around 20 seconds to parse a few hundred thousand lines (almost no backtracking, too).
Attoparsec/parsec have very similar APIs. I wonder why it cannot parse optimistically with attoparsec, and in case of failure - re-parse with parsec to get a nice error message. This should yield the best of both worlds?