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