25得票3回答
空间泄漏、写入器和总和(哦,我的上帝!)

我最近一直在使用Writer Monad,但是遇到了一个看起来像是空间泄漏的问题。由于我对这些东西的理解还不够深入,所以我想知道这里到底发生了什么,以及如何解决它。首先,这里是我触发这个错误的方法:import Control.Monad.Writer import Data.Monoid ...

22得票2回答
作者单子(Writer Monad)和状态单子(State Monad)实际上是相同的吗?

这里有一个很棒的教程(链接),它似乎表明Writer Monad基本上是一个特殊情况的元组对象,代表(A,B)。Writer在左侧(即A)累积值,并且A有相应的Monoid(因此可以累积或修改状态)。如果A是一个集合,则它会进行累积。 State Monad也处理内部元组的对象。它们都可以进...

10得票1回答
使用操作Monad实现的编写器不会惰性地工作。

我写了一个带有Writer功能的Monad,使用了操作Monad的方法。然后我发现它无法懒惰地工作。 在下面的代码中,有一个rogueWriter执行无限多个语句,每个语句都写入一个字符串。尽管只需要一些无限输出的字符,但程序不会终止。 经过我的分析,我发现这个流氓编写者实际上相当友好(哈...

7得票1回答
LYAH - 理解在链接 Writer monad 时关于 "tell" 的注释

LYAH在使用Writer单子和do符号的例子。问题在底部以加粗字体呈现。 import Control.Monad.Writer logNumber :: Int -> Writer [String] Int logNumber x = writer (x, ["number " ...