gpt4 book ai didi

function - 关于 Haskell IO Monad 中的(执行时)

转载 作者:行者123 更新时间:2023-12-02 15:02:59 25 4
gpt4 key购买 nike

我对 IO Monad 没问题。但我想了解以下内容:

  1. 在所有/几乎所有的 Haskell 教程/教科书中,他们一直在说 getChar 不是纯函数,因为它可以给你不同的结果。我的问题是:谁说这是一开始的功能。除非你把这个函数的实现给我,我研究那个实现,我不能保证它是纯的。那么,该实现在哪里?
  2. 在所有/几乎所有 Haskell 教程/教科书中,据说 (IO String) 是一个操作,(执行时)它可以返回一个 String 类型的值。这很好,但是执行执行的人/地点。当然!计算机正在执行此操作。这也可以。但由于我只是一个初学者,我希望你能原谅我问,这个“执行”的秘诀在哪里。我猜它不是用 Haskell 写的。这个后来的想法是否意味着,毕竟,Haskell 程序被转换为类 C 程序,最终将被转换为汇编 -> 机器代码?如果是这样,在哪里可以找到 Haskell 中 IO 内容的实现?

非常感谢

最佳答案

Haskell 函数与计算 不同。

计算是一段命令式代码(可能用 C 或汇编程序编写,然后编译为机器代码,可直接在处理器上执行),其本质上是有效的,甚至其效果不受限制。也就是说,一旦运行,计算就可以访问和更改任何内存并执行任何操作,例如与键盘和屏幕交互,甚至发射导弹。

相比之下,纯语言(例如 Haskell)中的函数无法更改任意内存和发射导弹。它只能更改自己的内存部分并返回在其类型中指定的结果。

因此,从某种意义上说,Haskell 是一门无能为力的语言。 Haskell is useless .这是 1990 年代的一个主要问题,直到 IO 被集成到 Haskell 中。

现在,IO a 值是指向单独准备的计算 的链接,最终有望生成a。您将无法用纯 Haskell 函数创建 IO a。所有的IO原语都是单独设计的,并打包到GHC中。然后,您可以将这些简单的计算组合成更简单的计算,最终您的程序可能会产生您想要的任何效果。

但有一点:纯函数彼此分离,只有将它们一起使用时它们才能相互影响。另一方面,计算可以自由地相互交互(正如我所说,它们通常可以做任何事情),因此可以(并且确实)意外地相互破坏。这就是为什么用命令式语言编写的软件中有这么多错误!因此,在 Haskell 中,计算保存在 IO 中。

我希望这至少能消除您的一些困惑。

关于function - 关于 Haskell IO Monad 中的(执行时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412023/

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