很抱歉,如果我无法取得更好的成绩。我正在尝试与Haskell中的monads合作,但我遇到了一些麻烦。
所以,我应该做的是:
定义功能
repeat:: IO Bool -> IO () -> IO()
这样repeat test oper
可以重复oper
,直到条件test
为True
所以,我这样做了:
repeat:: IO Bool -> IO () -> IO()
repeat test oper
= do res <- test
if res
then return ()
else do oper
repeat test oper
但是这段代码不起作用。你能解释一下为什么吗? 现在我收到“如果输入解析错误”。我想这只是一个语法错误,但我仍然不知道如何解决这个问题。
答案 0 :(得分:4)
如您所知,haskell中的嵌套是通过使用空格来完成的。正确格式化代码,它将起作用。请记住在haskell中使用空格而不是制表符,因为制表符通常会导致奇怪的解析错误。
repeat :: IO Bool -> IO () -> IO()
repeat test oper
= do res <- test
if res
then return ()
else do oper
repeat test oper