對不起,如果我不能做一個更好的標題。我正在嘗試與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