Has*_*hin 0 io haskell function
我对IO Monad没有任何问题.但我想了解以下内容:
(IO String)是一个动作(当执行时)它可以返回一个String类型的值.这很好,但是这个执行发生的人/地点.当然!计算机正在执行此操作.这也没关系.但由于我只是一个初学者,我希望你原谅我问,这个"执行"的配方在哪里.我猜它不是用Haskell编写的.这个后来的想法是否意味着,毕竟Haskell程序被转换为类似C的程序,最终将转换为程序集 - >机器代码?如果是这样,哪里可以找到Haskell中IO内容的实现?非常感谢
Haskell函数与计算不同.
计算是一段命令式代码(可能用C或汇编程序编写,然后编译成机器代码,可直接在处理器上执行),这本质上是有效的,甚至不受其影响.也就是说,一旦运行,计算可以访问和改变任何存储器并执行任何操作,例如与键盘和屏幕交互,甚至发射导弹.
相比之下,纯语言中的函数(如Haskell)无法改变任意记忆并发射导弹.它只能改变自己的内存部分,并返回其类型中指定的结果.
所以,从某种意义上说,Haskell是一种无法做任何事情的语言.Haskell没用.这是1990年代的一个主要问题,直到IO被整合到Haskell中.
现在,一个IO a值是一个单独准备的计算的链接,最终有希望产生a.您将无法创建IO a纯Haskell函数.所有IO原语都是单独设计的,并打包成GHC.然后,您可以将这些简单的计算组合成不那么简单的计算,最终您的程序可能会产生任何您想要的效果.
但有一点:纯函数是彼此分开的,如果你一起使用它们,它们只会相互影响.另一方面,计算可以自由地相互作用(正如我所说,它们通常可以做任何事情),因此可以(并且确实)意外地相互破坏.这就是为什么用命令式语言编写的软件中存在很多错误!因此,在Haskell中,计算保留在IO.
我希望这至少会消除你的一些困惑.