Monadic杂质和Haskell的纯度.他们是如何结合的?

Dra*_*gno 7 monads haskell functional-programming

monad构造如何帮助维持纯度(在Haskell中),同时做出不纯净的东西?例如,当你给出的print "Hello"是执行纯粹或不纯的代码时?这是一个非常微妙的细节,但有助于更好地理解功能语言中纯度和杂质的概念.

Ing*_*ngo 17

表达方式

print "Hello"
Run Code Online (Sandbox Code Playgroud)

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

这是一个类比:

一位和尚在一张纸上写道:

Go to a bordell and do filthy things with the prostitutes there.
Run Code Online (Sandbox Code Playgroud)

我们可以因为通奸而指责僧侣,只因为他写了一份通奸指令吗?

  • 真实的世界Haskell确实.+1 (3认同)

Hui*_*eng 6

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

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