`scalaz-effect` 中的`effect` 是什么意思

What does the `effect` mean in `scalaz-effect`

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

scalaz-effect: Data structures to represent and compose IO effects in the type system.

我不太清楚 effect 在这里是什么意思。这是一个特殊的概念吗?或者只是 side-effect 中的 effect?

效果和副作用是不同的东西。

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

副作用是可观察到的与外界的相互作用,当解释器 运行 起作用时就会发生这种情况。例如,要使我们的 IO 示例执行副作用,我们应该 运行 方法 unsafePerformIO 在它上面:

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

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