1

使用 trifecta 库,我应该解析一个不包含尾随字母的整数字符串返回解析后的整数:

Prelude> parseString (yourFuncHere) mempty "123"
Success 123
Prelude> parseString (yourFuncHere) mempty "123abc"
Failure (interactive):1:4: error: expected: digit,
    end of input
123abc<EOF>

我已经能够使用 do 符号来做到这一点,如下所示:

x <- decimal
eof
return x

但我未能成功将其转换为绑定/lambdas。

这不会保留解析的数字,但在其他方面是正确的:

decimal >> eof

我想我应该这样开始

decimal >>= \x -> eof

但在此之后,我尝试过的每一个排列都不起作用。如何返回解析的数字并使用绑定语法检查 eof 而不是 do?

4

1 回答 1

4

你需要做

decimal >>= (\x -> (eof >> return x))

组合器eof不返回任何东西,所以你必须自己返回你想要的东西。

于 2016-06-17T21:50:11.890 回答