下面的Haskell snippit不會編譯,我找不出原因。Haskell IO monad and do notation
runCompiler :: TC -> IO()
runCompiler tc = let cp' = cp in
do
cp'
return()
where
cp = compileProg tc
我從GHCI收到以下錯誤:
Couldn't match expected type `IO a0' with actual type `String'
In a stmt of a 'do' block: cp'
In the expression:
do { cp';
return() }
In the expression:
let cp' = cp
in
do { cp';
return() }
任何想法怎樣做才能讓它編譯。我不明白爲什麼它不會接受()作爲給定的最終值。
compileProg的類型簽名是什麼? – mhwombat 2013-04-05 12:06:10
爲什麼你將'compileProg tc'綁定到'cp''和'cp'?爲什麼你在同一個函數中同時使用'let'和'where'?這很混亂。 – 2013-04-05 12:22:03
當我將它更改爲下面的答案時,它會編譯。現在我的問題是讓它輸出由compileProg返回的字符串。 – 2013-04-05 12:23:20