Monad也测量副作用

Roh*_*rma 3 f# haskell functional-programming

我如何计算在Monad上应用bind的次数 - 给定状态monad的例子,我想计算状态改变的次数.我怎样才能最好地封装这个?这个逻辑应该是绑定运算符的一部分(因为它会增加计数而产生副作用)还是有更好的方法呢?

Dan*_*ner 15

你不能.其中一个monad法则是

return x >>= f = f x
Run Code Online (Sandbox Code Playgroud)

左边有一个绑定,右边没有绑定,所以没有守法的monad可以观察到有多少绑定.

充其量你可以采取行动

increment :: M ()
Run Code Online (Sandbox Code Playgroud)

在你的monad撞击一个柜台.(正如您所说,这可以使用StateT或类似,或者以其他几种基本上同构的方式实现.)

  • 或许更关键的是,"w≡w>> =return≡W>> = return >> =return≡...`. (3认同)