如何适应多人回归哈斯克尔的左托

时间:2018-07-02 08:24:42

标签: haskell attoparsec

例如

parseTest :: Parser Int
parseTest = char '(' *> return 1 <* char ')'

parseTests :: Parser [Int]
parseTests = many' $ char '(' *> return 1 <* char ')'

parseOnly ParseIni.parseTest "(" -- returns Left with error
parseOnly ParseIni.parseTests "(" -- returns Right with []

我如何使第二个返回丢失的)返回Left,我也想用答案为Right []的空字符串来分析情况?

1 个答案:

答案 0 :(得分:1)

From the doc on parseOnly

  

要强制解析器使用其所有输入,请使用以下命令:

parseOnly (myParser <* endOfInput)

ParseIni.parseTests将解析器char '(' *> return 1 <* char ')'应用于零次或更多次。它总是成功的,因为它至少可以应用零次。因此,您需要通过用endOfInput组成它来确保它消耗了所有东西。

parseOnly (ParseIni.parseTests <* endOfInput) "("