单子的不纯和Haskell的纯净。它们如何结合?

7

单子构造如何帮助在Haskell中保持纯度,同时执行不纯的操作?例如,当您输入print "Hello"时,您是否执行纯代码还是不纯代码?这是一个非常微妙的细节,但有助于更好地理解函数式语言中纯度和不纯度的概念。


1
你可以看一下我在这个话题上的回答:(http://stackoverflow.com/questions/14201994/keep-variable-inside-another-function-in-haskell/14206044#14206044)。也许可以帮到你。 - zurgl
2个回答

20

这个表达式

print "Hello"

确实是纯粹的。它不会打印任何东西,而是构建了一个在执行时打印“Hello”的东西。

以下是一个类比:

一个僧侣在一张纸上写字:

Go to a bordell and do filthy things with the prostitutes there.

仅仅因为一个和尚写了一篇关于通奸的指导,我们能就此指控他有通奸行为吗?


6

在stackoverflow上的这个问题可能会回答你的问题:IO Monad在什么意义上是“pure”的?

简单来说,Monad本身是纯粹的,但它可以发出不纯的指令。更具体地说,Monad可以被视为一系列可组合的计算描述。其中一些计算可能是脏的(即具有副作用),但描述本身是完全纯净的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接