2

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

我想做如下...

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

实际上,我真的不知道WriterandWriterTWriter.Identity等之间的区别......

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

4

1 回答 1

1

如果我正确理解了您要执行的操作,则可以使用退出您的,然后从中提取字符串runWriter。像,也许。((Int, String), [Int])Writersnd . fst . runWriter ...

WriterT是当您需要将 aWriter与其他一些 monad 结合使用时使用的。Writer与其为and编写单独但相似的实现,不如WriterT只为 编写实现WriterT,并定义WriterWriterT使用Identitymonad 的 a 更容易。Identitymonad 并没有真正做任何事情。你可以简单地假装它不存在。

于 2013-07-16T11:25:55.803 回答