Why does Parsec stop parsing with multiple parser?

100 views Asked by At

I'm trying to write a simple parser in Haskell using Parsec but my input "Hello World" is never correctly parsed.

My code looks like this:

parser = p1 <|> p2

p1 = string "Hello"
p2 = string "Hello World"

If I run it I get the error unexpected whitespace

1

There are 1 answers

2
Anton Kesy On BEST ANSWER

p1 already consumes the tokens "Hello" and therefore p2 instantly fails because the next token is whitespace.

You could use something like try to reset the consumed tokens.

parser = try p1 <|> p2

p1 = string "Hello"
p2 = string "Hello World"