Monad还可以测量副作用

时间:2019-01-20 22:22:35

标签: haskell functional-programming f#

我如何计算将绑定应用于Monad的次数-给出状态monad的示例,我想计算状态更改的次数。我如何最好地封装它?该逻辑应该是绑定运算符的一部分(由于它增加计数会产生副作用)还是有更好的方法呢?

1 个答案:

答案 0 :(得分:12)

不能。单子法则之一是

return x >>= f = f x

在左边有一个绑定,在右边没有一个绑定,因此没有一个守法的单子可以观察到有多少绑定。

充其量您可能会有动作

increment :: M ()

在您的monad中,它会反击。 (正如您所说,可以使用StateT或类似方法,或者通过其他两种基本同构的方法来实现。)