7

monad 构造如何帮助保持纯度(在 Haskell 中)同时做不纯净的事情?例如,当print "Hello"您执行纯代码或不纯代码时?这是一个非常微妙的细节,但有助于更好地理解函数式语言中纯度和杂质的概念。

4

2 回答 2

18

表达方式

print "Hello"

确实是纯洁的。因为它不打印任何东西,而是构造一些在执行时打印“Hello”的东西。

这是一个类比:

一位僧人在一张纸上写道:

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

我们可以因为僧侣通奸而指责他,仅仅因为他写了一个从事通奸的指示吗?

于 2013-01-10T10:41:15.837 回答
6

stackoverflow 中的问题可能会回答您的问题:IO Monad 在什么意义上是纯的?

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

于 2013-01-10T10:47:30.493 回答