Haskell中的Writer与WriterT

Vla*_*ala 10 monads haskell

WriterWriterTHaskell有什么区别?一个比另一个更受欢迎吗?

ham*_*mar 16

不同的是,Writer一个单子,而WriterT一个单子转换,即你给它一些基本的单子,和它给你回在上面"作家"的特点一个新的单子.如果您只需要特定于编写器的功能,请使用Writer.如果你需要将其效果与其他一些monad结合IO使用,例如,使用WriterT.

  • 另请注意,`Writer`是通过`WriterT`定义的.更确切地说,我们有`类型Writer w = WriterT w Identity`.这里`身份'是一个没有效果的单子.也就是说,我们给`WriterT`一个没有效果的monad并得到`Writer` monad. (5认同)
  • @pat:嗯,我想到的方式,你把低级monad提升到与作者相同的水平. (4认同)
  • 我从来没有弄清楚可视化"Monad"堆栈的方式.在这里,你说作者的功能在顶部,但是为了访问下面的`Monad`,你使用`lift`,这使我可以看到作者在底部. (2认同)