我看到scalaz
有一个模块scalaz-effect
:
scalaz-effect:在类型系统中表示和组合IO效果的数据结构。
我不太确定effect
在这里意味着什么。这是一个特殊的概念吗?或者只是effect
中的side-effect
?
答案 0 :(得分:2)
效果和副作用是不同的。
效果是描述与外界交互的纯表达式,但实际上并不执行该交互。因此,效果引用透明。例如,IO.putStrLn("Hello, world")
是一种效果。
副作用是与外界的可观察的交互,当解释器运行时会发生这种交互。例如,要使我们的IO
示例执行副作用,我们应该在其上运行方法unsafePerformIO
:
IO.putStrLn("Hello, world").unsafePerformIO()
如果没有unsafePerformIO
,我们的IO[Unit]
类型表达式只是一个纯表达式(如5 + 8
或"abc"
)。