下面的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