`效果'在'scalaz效应'中意味着什么

时间:2015-07-07 02:11:09

标签: scala functional-programming effects scalaz

我看到scalaz有一个模块scalaz-effect

  

scalaz-effect:在类型系统中表示和组合IO效果的数据结构。

我不太确定effect在这里意味着什么。这是一个特殊的概念吗?或者只是effect中的side-effect

1 个答案:

答案 0 :(得分:2)

效果和副作用是不同的。

效果是描述与外界交互的纯表达式,但实际上并不执行该交互。因此,效果引用透明。例如,IO.putStrLn("Hello, world")是一种效果。

副作用是与外界的可观察的交互,当解释器运行时会发生这种交互。例如,要使我们的IO示例执行副作用,我们应该在其上运行方法unsafePerformIO

IO.putStrLn("Hello, world").unsafePerformIO()

如果没有unsafePerformIO,我们的IO[Unit]类型表达式只是一个纯表达式(如5 + 8"abc")。