Return 在 Parser integer >> eof using bind 中解析的整数

Return integer parsed in Parser integer >> eof using bind

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

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

但是我没有成功将其翻译成 bind/lambdas。

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

decimal >> eof

我想我应该这样开始

decimal >>= \x -> eof

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

你需要做

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

eof 组合器没有 return 任何东西,所以你必须 return 你自己想要的东西。