Haskell parsec parser space analysis errors
I have
stringparse = mstring <$> char '"' <*> (many alphaNum <|> many space) <*> char '"' where mstring abc = [a] ++ b ++ [c]
When i do this
parse stringparse "" "\"hello\"
I get Right "\"hello\""
When i do this
parse stringparse "" "\"\""
I get Right "\"\""
But when I do this,
parse stringparse "" "\" \""
or parse stringparse "" "\"he llo\""
he does not work.
I get errors
Left (line 1, column 2): unexpected " " expecting letter or digit or "\""
and
Left (line 1, column 4): unexpected " " expecting letter or digit or "\""
respectively.
I do not understand why the code does not parse spaces properly.
This is because you are doing this many alphaNum <|> many space
. many
accepts 0 as an acceptable number of characters; it always succeeds. This is the same behavior as *
in regular expressions.
So, in <|>
it will never work and will call the right side. So you say, "try as much alphaNum
as you can, then get it. "
Do you want to
many (alphaNum <|> space)
In other words, "as many alphaNum
or space
as possible."