使用Writer monad

时间:2014-12-26 00:36:24

标签: haskell

我看到Writer monad如何允许我们生成一个字符串列表以及一组计算,但这有什么用呢?看起来很粗糙。似乎很少有“真实世界”使用Writer的例子。除了教学目的之外,这个monad实际上有用的是什么?

缺乏示例似乎是学习Haskell的障碍之一。如果有一个全面的Haskell Cookbook可以提供帮助,那就太好了。 (那么,有吗?)

3 个答案:

答案 0 :(得分:6)

对于实际使用,您可以看到它正在这些项目中使用:

还有更多......

一旦你开始编写更多代码,你会发现Writer monad或它的变换器版本确实在很多现实场景中都很有用。

答案 1 :(得分:5)

Writer本身就是IMO,相当无用。是的,"记录一个纯粹的计算"有道理,但对于一个简单的纯计算,你必须重写一切以使用monadic绑定。结果不会比你刚刚重写它以手动连接日志信息更好。

然而,真正有用的是将WriterT - 层添加到您拥有的monad堆栈中,这样您就可以获得日志记录功能而几乎不会更改定义。这就是"强大的"像Yesod之类的monad那样的monad,但是WriterT也可以应用于你使用的任何简单的专用monad。

答案 2 :(得分:2)

除输出外,它对产生附加数据的任何函数都很有用。 '真实'有用的部分是monad,和所有其他monadic函数一样,它们很容易组合成更大的函数。

至于它们可以用于什么:

  • 记录(记录某些计算的子部分)
  • 序列化(在计算某些结果时执行序列化)
  • 持久性(在磁盘或其他存储上保存状态时执行计算)
  • 可能还有其他因素取决于你的创意