Haskell Parsec:使用所有输入

Haskell Parsec:使用所有输入,haskell,parsec,Haskell,Parsec,我对Parsec的一个常见问题是,如果无效输入发生在“正确”的地方,它往往会忽略它 作为一个具体的例子,假设我们有integer::Parser Int,我写 expression = sepBy integer (char '+') (暂时忽略空白问题。) 这正确地解析了类似“123+456+789”的内容。但是,如果我输入“123+456-789”,它会愉快地忽略非法的“-”字符和表达式的尾随部分;实际上,我想要一条错误消息,告诉我有关无效输入的信息,而不是让它默默地忽略该部分 我明白为什

我对Parsec的一个常见问题是,如果无效输入发生在“正确”的地方,它往往会忽略它

作为一个具体的例子,假设我们有
integer::Parser Int
,我写

expression = sepBy integer (char '+')
(暂时忽略空白问题。)

这正确地解析了类似“123+456+789”的内容。但是,如果我输入“123+456-789”,它会愉快地忽略非法的“-”字符和表达式的尾随部分;实际上,我想要一条错误消息,告诉我有关无效输入的信息,而不是让它默默地忽略该部分


我明白为什么会这样;我不确定的是如何修复它。设计使用所有提供的输入并仅当所有输入都是有效表达式时才成功的解析器的一般方法是什么?

实际上非常简单——只要确保后跟
eof

parse (expression <* eof) "<interactive>" "123+456-789"
parse(表达式)