
Actually, It's not <|> that's different, it's the string combinator.
In Parsec, string matches each character one at a time. If the match
fails, any partial input it matched is consumed. In attoparsec,
string matches either the entire thing or not, as a single step. If
it fails to match, no input is consumed.
Carl
On Wed, Mar 2, 2011 at 9:51 AM, Stephen Tetley
Actually this is stranger than I thought - from testing it seems like Attoparsec's (<|>) is different to Parsec's. From what I'm seeing Attoparsec appears to do a full back track for (<|>) regardless of whether the string lexer is wrapped in try, whereas Parsec needs try to backtrack.
On 2 March 2011 16:24, Stephen Tetley
wrote: *try* means backtrack on failure, and try the next parser. So if you want ill formed strings to throw an error if they aren't properly enclosed in double quotes don't use try.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe