在 Haskell 中与 Writer Monad 进行模式匹配的正确方法是什么?
我想做如下...
import Control.Monad.Writer
hoge :: Writer [Int] (Int, String) -> String
hoge (Writer (_, (_, s))) = s
实际上,我真的不知道Writer
andWriterT
和Writer.Identity
等之间的区别......
任何指导将不胜感激,感谢您的阅读。
如果我正确理解了您要执行的操作,则可以使用退出您的,然后从中提取字符串runWriter
。像,也许。((Int, String), [Int])
Writer
snd . fst . runWriter ...
WriterT
是当您需要将 aWriter
与其他一些 monad 结合使用时使用的。Writer
与其为and编写单独但相似的实现,不如WriterT
只为 编写实现WriterT
,并定义Writer
为WriterT
使用Identity
monad 的 a 更容易。Identity
monad 并没有真正做任何事情。你可以简单地假装它不存在。