【发布时间】:2013-01-10 10:31:11
【问题描述】:
monad 构造如何帮助保持纯度(在 Haskell 中)同时做不纯粹的事情?例如,当您提供print "Hello" 时,您是在执行纯代码还是不纯代码?这是一个非常微妙的细节,但有助于更好地理解函数式语言中纯度和杂质的概念。
【问题讨论】:
标签: haskell functional-programming monads
monad 构造如何帮助保持纯度(在 Haskell 中)同时做不纯粹的事情?例如,当您提供print "Hello" 时,您是在执行纯代码还是不纯代码?这是一个非常微妙的细节,但有助于更好地理解函数式语言中纯度和杂质的概念。
【问题讨论】:
标签: haskell functional-programming monads
表达式
print "Hello"
确实很纯净。因为它不打印任何东西,而是构造一些在执行时打印“Hello”的东西。
这是一个类比:
和尚在一张纸上写:
Go to a bordell and do filthy things with the prostitutes there.
我们可以因为僧侣通奸而指责他,仅仅因为他写了一个从事通奸的指示吗?
【讨论】:
stackoverflow 中的问题可能会回答你的问题:In what sense is the IO Monad pure?
简而言之,monad 本身是纯,但它可以发出不纯指令。 更具体地说,monad 可以被视为一系列可组合的计算描述。其中一些计算可能是脏的(即有副作用),但描述本身是完全纯净的。
【讨论】: