Haskell 哈斯凯尔的作家vs作家

Haskell 哈斯凯尔的作家vs作家,haskell,monads,Haskell,Monads,Haskell中的Writer和WriterT有什么区别?一个比另一个好吗?区别在于Writer是一个单子,而WriterT是一个单子,也就是说,你给它一些基本的单子,它给你一个新的单子,上面有“Writer”功能。如果您只需要特定于编写器的功能,请使用writer。如果您需要将其效果与一些其他monad(如IO)结合起来,请使用WriterT来补充上述出色的解释,我还想指出本文。对我帮助很大: 还请注意,Writer是通过WriterT定义的。更准确地说,我们有类型编写器w=WriterT w

Haskell中的
Writer
WriterT
有什么区别?一个比另一个好吗?

区别在于
Writer
是一个单子,而
WriterT
是一个单子,也就是说,你给它一些基本的单子,它给你一个新的单子,上面有“Writer”功能。如果您只需要特定于编写器的功能,请使用
writer
。如果您需要将其效果与一些其他monad(如
IO
)结合起来,请使用
WriterT

来补充上述出色的解释,我还想指出本文。对我帮助很大:


还请注意,
Writer
是通过
WriterT
定义的。更准确地说,我们有
类型编写器w=WriterT w Identity
。这里的
Identity
是一个无效的单子。也就是说,我们给
WriterT
一个单子,却没有效果,然后得到
Writer
monad。我一直无法找到可视化
monad
堆栈的方法。在这里,您说writer功能位于顶部,但要访问下面的
Monad
,您可以使用
lift
,这使我将writer视为位于底部。@帕特:我认为,您将较低的Monad提升到与writer相同的级别。这个链接发生在404,这里有一个新的链接,供那些像我一样偶然发现这一点的人使用: