`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"
)。
我看到 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"
)。