gpt4 book ai didi

haskell - 主函数提示返回一个非 IO 单子(monad)

转载 作者:行者123 更新时间:2023-12-03 22:47:19 27 4
gpt4 key购买 nike

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 Action !它的类型是:

trace :: String -> a -> a

所以编译器推断您正在定义 main在 List monad 中!因此它提示您将其定义为 [()]什么时候应该是 IO () .

尝试使用 traceIO (或只是 putStrLn )代替。请记住 trace是一个调试功能:它不安全地打印内容并“突破” IO monad,这是一个真正的工作程序永远不应该这样做的。

(通常,您可以通过自己编写类型签名来避免混淆:始终将 main 函数编写为
main :: IO ()
main = do
...

然后你得到的错误就不会那么困惑了,因为 GHC 不会推断出奇怪的类型。)

关于haskell - 主函数提示返回一个非 IO 单子(monad),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com