我一次又一次读到有效的,但我仍然无法给出它的含义的明确定义。我认为正确的上下文是effectful 计算,但我也看到了我以前认为effectful手段有副作用术语effectful values)“有效”究竟意味着什么
。但是在Haskell中没有副作用(除了某种程度上IO)。仍然有各地有效的计算。
然后我读到monads用于创建有效的计算。我可以在State
Monad的背景下对此有所了解。但是我没有看到在monod中有任何副作用。一般来说,在我看来,包装一个类似功能的东西的Monad比包装一个值的Monad更容易被看作是产生副作用。
说到Applicative
仿函数我更迷路了。我总是看到应用函数作为一种具有多个参数的函数map
。这里我看不到任何副作用。或者效果如何和效果?
也许有用:https://slpopejoy.github.io/posts/Effectful01.html他定义*效果*为:1.实际的副作用(IO)2.似乎是副作用的东西(状态,作家等等)3.持续在函数调用(读取器,状态等)上的上下文4.非局部控制流(可能,任一)。 –
大多数单子是用纯粹的计算来定义的,但从程序员的角度来看,通常认为'将状态sa'看作是一个必要的子程序,可以读/写具有副作用的状态's',最后产生一个'a'。即使它是纯粹的,有时假装它不是很方便。关于主题,我认为效果和效果意味着同样的事情,即使它们有时会广泛应用于任何monad/applicative中包含的值,即使这些值没有对副作用建模。 – chi