我如何计算将绑定应用于Monad的次数-给出状态monad的示例,我想计算状态更改的次数。我如何最好地封装它?该逻辑应该是绑定运算符的一部分(由于它增加计数会产生副作用)还是有更好的方法呢?
答案 0 :(得分:12)
不能。单子法则之一是
return x >>= f = f x
在左边有一个绑定,在右边没有一个绑定,因此没有一个守法的单子可以观察到有多少绑定。
充其量您可能会有动作
increment :: M ()
在您的monad中,它会反击。 (正如您所说,可以使用StateT
或类似方法,或者通过其他两种基本同构的方法来实现。)