对不起,如果我不能做一个更好的标题。我正在尝试与Haskell中的monads一起工作,但我遇到了一些麻烦。哈斯克尔monad布尔重复
所以,我应该做的是:
定义功能
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
但这种代码是行不通的。你能解释我为什么吗? 现在,我收到了“如果输入解析错误”。我想这只是一个语法错误,但我仍然不知道如何解决这个练习。
你应该是正确的,这只是缩进。为什么不[学习如何钓鱼](https://en.wikibooks.org/wiki/Haskell/Indentation)? – user2407038
@ user2407038不幸的是,该页面没有提及使用制表符的危险,这对于SO问题是特别糟糕的(所以将制表符缩进转换为4个空格,Haskell将它们定义为8)。尽管在这种情况下这似乎不是全部问题。 (至少,我找不到使得问题代码正确对齐的制表符宽度。) –
对GHC使用'-fwarn-tabs'选项,或者(更好)将'{ - #OPTIONS_GHC -fwarn-tabs# - } '源文件顶部的编译指示(在任何模块导入或其他实际代码之前)。这将使编译器在看到任何选项卡时生成警告。我个人更喜欢启用所有警告,然后禁用愚蠢的名字遮蔽。 – dfeuer