在Haskell中与Writer Monad有匹配吗?

时间:2013-07-16 11:10:46

标签: haskell monads

在Haskell中与Writer Monad进行模式匹配的正确方法是什么?

我想做以下......

import Control.Monad.Writer
hoge :: Writer [Int] (Int, String) -> String
hoge (Writer (_, (_, s))) = s

实际上,我真的不知道WriterWriterT以及Writer.Identity等之间的区别......

任何指导都将不胜感激,感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

如果我已正确理解您要执行的操作,可以使用runWriter((Int, String), [Int])中获取Writer,然后从中提取字符串。或许像snd . fst . runWriter ...这样的东西。

WriterT是您在需要将Writer与其他monad组合时使用的内容。不是为WriterWriterT编写单独但相似的实现,而是更容易编写WriterT的实现,并将Writer定义为WriterT }使用Identity monad。 Identity monad并没有真正做任何事情;你可以简单地假装它不存在。