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 你自己想要的东西。
使用 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 你自己想要的东西。