Haskell monad bool重复

时间:2014-06-07 20:20:34

标签: haskell monads

很抱歉,如果我无法取得更好的成绩。我正在尝试与Haskell中的monads合作,但我遇到了一些麻烦。

所以,我应该做的是:

定义功能

repeat:: IO Bool -> IO () -> IO()

这样repeat test oper可以重复oper,直到条件testTrue

所以,我这样做了:

repeat:: IO Bool -> IO () -> IO()
repeat test oper
    = do res <- test
            if res 
            then return ()
                else do oper
                    repeat test oper

但是这段代码不起作用。你能解释一下为什么吗? 现在我收到“如果输入解析错误”。我想这只是一个语法错误,但我仍然不知道如何解决这个问题。

1 个答案:

答案 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