Haskell parsec空间解析错误

时间:2013-09-13 02:11:27

标签: haskell parsec

我有

stringparse = mstring
          <$> char '"'
          <*> (many alphaNum <|> many space)
          <*> char '"'
    where mstring a b c = [a] ++ b ++ [c]

当我这样做时,

parse stringparse "" "\"hello\"我得到Right "\"hello\""

当我这样做时,

parse stringparse "" "\"\""我得到Right "\"\""

但是当我这样做时,

parse stringparse "" "\" \""parse stringparse "" "\"he llo\""

它不起作用。

我收到错误,

Left (line 1, column 2):
unexpected " "
expecting letter or digit or "\""

Left (line 1, column 4):
unexpected " "
expecting letter or digit or "\""

分别

我不明白为什么代码不能正确解析空格。

1 个答案:

答案 0 :(得分:10)

这是因为你正在做这个many alphaNum <|> many spacemany接受0作为可接受的字符数量,它总是成功。这与正则表达式中的*行为相同。

所以在一个<|>中,它永远不会失败并呼叫右侧。所以你说“尝试尽可能多alphaNum,然后选择"

你想要的是

many (alphaNum <|> space) 

换句话说,“尽可能多alphaNumspace”。