Haskell parsec space parsing errors



我有

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 """

分别。

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

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

所以在<|>它永远不会失败并打电话给正确的一方。所以你说"尝试尽可能多的alphaNum然后"

你想要的是

many (alphaNum <|> space) 

换句话说,"尽可能多的alphaNumspace"。

最新更新