例如
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 []
的空字符串来分析情况?
答案 0 :(得分:1)
要强制解析器使用其所有输入,请使用以下命令:
parseOnly (myParser <* endOfInput)
ParseIni.parseTests
将解析器char '(' *> return 1 <* char ')'
应用于零次或更多次。它总是成功的,因为它至少可以应用零次。因此,您需要通过用endOfInput
组成它来确保它消耗了所有东西。
parseOnly (ParseIni.parseTests <* endOfInput) "("