import Debug.Trace
main = do
trace "Main function parses, and returns - " "0"
return ()
这会引发错误,
app.hs:3:1:
Couldn't match expected type ‘IO t0’ with actual type ‘[()]’
In the expression: main
When checking the type of the IO action ‘main’
如果我没记错的话,模块一定可以无返回地工作。但无论有没有返回功能,它都不起作用。
trace
不是 IO 操作!它的类型是:
trace :: String -> a -> a
所以编译器推断你正在定义main
处于列出单子!因此它抱怨你将其定义为[()]
当它应该是IO ()
.
尝试使用traceIO
(或者简单地putStrLn
) 反而。请记住trace
是一个调试功能:它会不安全地打印内容并“破坏”IO monad,而真正的工作程序永远不应该这样做。
(一般来说,您可以通过自己编写类型签名来避免混淆:始终编写您的main
充当
main :: IO ()
main = do
...
然后你得到的错误就不会那么混乱了,因为 GHC 不会推断出奇怪的类型。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)