monad构造如何帮助维持纯度(在Haskell中),同时做出不纯净的东西?例如,当你给print "Hello"
执行纯粹或不纯的代码时?这是一个非常微妙的细节,但有助于更好地理解功能语言中纯度和杂质的概念。
答案 0 :(得分:17)
表达式
print "Hello"
确实是纯粹的。因为它不打印任何东西,而是构造一些东西,当执行时,打印“Hello”。
这是一个类比:
和尚在一张纸上写道:
Go to a bordell and do filthy things with the prostitutes there.
我们可以因为通奸而指责僧侣,只是因为他写了一份通奸指令吗?
答案 1 :(得分:5)
stackoverflow中的问题可能会回答您的问题:In what sense is the IO Monad pure?
简而言之,monad本身纯,但它可以发出不纯的指令。 更具体一点,monad可以被视为一系列可组合的计算描述。其中一些计算可能很脏(即有副作用),但描述本身是完全纯净和干净的。