gpt4 book ai didi

haskell - 返回 IO 操作的后果是什么?

转载 作者:行者123 更新时间:2023-12-01 11:17:59 24 4
gpt4 key购买 nike

在 Haskell 中,类型构造器 IO 是一个配备了 return 语句的 monad,可以将任何表达式提升到它的 IO 版本。

没有什么能阻止我们将已经是 IO 的操作提升到它的 IO 版本——给我们一个 IO (IO a) .

所以我可以编写以下程序:

main = return . print $ "Hello world"

执行时什么都不做。

我的问题是,当这个 main 被执行时,幕后会发生什么?

在某些情况下返回 IO action 是否有意义?

最佳答案

在幕后,运行时有效地丢弃了 IO 操作 main结果,这就是为什么它通常被定义为 IO()。这意味着如果 main 实际上有一个类似 IO (IO Int) 的类型,则没有真正的问题。 IO Action 被执行,结果(另一个 IO Action )被丢弃,未被执行。

在程序的更深处,您更有可能触发类型错误。例如,如果您的意思是 fmap doSomething getLinefmap doSomething (return .getLine) 将不会进行类型检查。

关于haskell - 返回 IO 操作的后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48186231/

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