单子构造如何帮助在Haskell中保持纯度,同时执行不纯的操作?例如,当您输入print "Hello"
时,您是否执行纯代码还是不纯代码?这是一个非常微妙的细节,但有助于更好地理解函数式语言中纯度和不纯度的概念。
单子构造如何帮助在Haskell中保持纯度,同时执行不纯的操作?例如,当您输入print "Hello"
时,您是否执行纯代码还是不纯代码?这是一个非常微妙的细节,但有助于更好地理解函数式语言中纯度和不纯度的概念。
这个表达式
print "Hello"
确实是纯粹的。它不会打印任何东西,而是构建了一个在执行时打印“Hello”的东西。
以下是一个类比:
一个僧侣在一张纸上写字:
Go to a bordell and do filthy things with the prostitutes there.
仅仅因为一个和尚写了一篇关于通奸的指导,我们能就此指控他有通奸行为吗?
在stackoverflow上的这个问题可能会回答你的问题:IO Monad在什么意义上是“pure”的?
简单来说,Monad本身是纯粹的,但它可以发出不纯的指令。更具体地说,Monad可以被视为一系列可组合的计算描述。其中一些计算可能是脏的(即具有副作用),但描述本身是完全纯净的。