This is an attempt to address a bug I introduced when I changed the semantics of the <|> operator, I introduced a bug. Consider the following parser:
(char 'f' *> char 'i') <|> char 'o'
When I got rid of backtracking, this parser would accept an input of "fo", which is clearly not desirable.
The Status type rescues this somewhat: when any parser consumes input, it enters the Committed state. The <|> operator only executes its RHS if its LHS fails while in the Uncommitted state (i.e. hasn't consumed any input).
There's a nasty snag, of course: tracking this additional piece of state regresses aeson parsing performance to *worse* than when we had backtracking!