在Haskell中与Writer Monad进行模式匹配的正确方法是什么?
我想做以下......
import Control.Monad.Writer
hoge :: Writer [Int] (Int, String) -> String
hoge (Writer (_, (_, s))) = s
实际上,我真的不知道Writer
和WriterT
以及Writer.Identity
等之间的区别......
任何指导都将不胜感激,感谢您的阅读。
答案 0 :(得分:1)
如果我已正确理解您要执行的操作,可以使用runWriter
从((Int, String), [Int])
中获取Writer
,然后从中提取字符串。或许像snd . fst . runWriter ...
这样的东西。
WriterT
是您在需要将Writer
与其他monad组合时使用的内容。不是为Writer
和WriterT
编写单独但相似的实现,而是更容易编写WriterT
的实现,并将Writer
定义为WriterT
}使用Identity
monad。 Identity
monad并没有真正做任何事情;你可以简单地假装它不存在。