gpt4 book ai didi

haskell - 评估和执行 IO 操作之间的差异 : what causes Haskell to perform IO?

转载 作者:行者123 更新时间:2023-12-04 16:25:35 24 4
gpt4 key购买 nike

Haskell 使用什么机制来实际决定调用以下 4 个操作?

main :: IO ()
main = getLine >>= putStrLn >> getLine >>= putStrLn

最初我认为这与惰性评估有关,但是......就像 Real Word Haskell 一样,关于 IO Action ,他们

produce an effect when performed, but not when evaluated



所以我怀疑这是某种其他机制,而不是系统想要“评估” main .这个机制是什么?或者如果是评估,Haskell“想要”评估什么导致它执行一系列 Action ?

最佳答案

作为一阶近似,Haskell 程序中唯一的求值来源是main。 .这意味着:

  • IO可以通过 >>= 组装和组合 Action , >> , <*> , fmap等以产生任何其他 IO行动,但
  • 只有 main IO行动永远会产生效果。

  • 从某种意义上说,Haskell 程序所做的一切都是运行 main :: IO () .对于要评估的任何内容,它都必须妨碍 IO 的运行。行动(这是懒惰适合的地方)。这就引出了一个问题:实际运行 IO 意味着什么?行动?

    在引擎盖下, IO最终表现得像(严格) State穿过它的 monad RealWorld 状态(不包含任何信息——它象征着副作用包含在世界上的状态),所以“运行” IO (相当于 State RealWorld )就像调用 runState .当然,这个 runState任何程序只能出现一次 - 这正是 main确实(以及是什么让它变得神奇)!

    关于haskell - 评估和执行 IO 操作之间的差异 : what causes Haskell to perform IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657529/

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