我看到Writer monad如何允许我们生成一个字符串列表以及一组计算,但这有什么用呢?看起来很粗糙。似乎很少有“真实世界”使用Writer的例子。除了教学目的之外,这个monad实际上有用的是什么?
缺乏示例似乎是学习Haskell的障碍之一。如果有一个全面的Haskell Cookbook可以提供帮助,那就太好了。 (那么,有吗?)
答案 0 :(得分:6)
对于实际使用,您可以看到它正在这些项目中使用:
还有更多......
一旦你开始编写更多代码,你会发现Writer monad或它的变换器版本确实在很多现实场景中都很有用。
答案 1 :(得分:5)
Writer
本身就是IMO,相当无用。是的,"记录一个纯粹的计算"有道理,但对于一个简单的纯计算,你必须重写一切以使用monadic绑定。结果不会比你刚刚重写它以手动连接日志信息更好。
然而,真正有用的是将WriterT
- 层添加到您拥有的monad堆栈中,这样您就可以获得日志记录功能而几乎不会更改定义。这就是"强大的"像Yesod之类的monad那样的monad,但是WriterT
也可以应用于你使用的任何简单的专用monad。
答案 2 :(得分:2)
除输出外,它对产生附加数据的任何函数都很有用。 '真实'有用的部分是monad,和所有其他monadic函数一样,它们很容易组合成更大的函数。
至于它们可以用于什么: