【发布时间】:2012-03-14 13:48:34
【问题描述】:
我有一个 monad 用于计算可能会失败并进行一些日志记录:
f1 :: WriterT [String] (Either String) a
我有一个不会失败但会记录一些日志的函数:
f2 :: Writer [String] b
使用 f2 的日志更新 f1 中的 writer monad 并捕获 f2 计算的输出的最佳方法是什么?目前我正在这样做:
f2result <- (\(r,l) -> do {tell l; return r}) (runWriter f2)
我正在使用 lift 用不同的计算更新内部 monad,因此切换 Writer 和 Either monad 不会解决问题。
【问题讨论】:
-
感谢 danr 和 rampion 的回复。我选择使用 wrap 方法。虽然我可以更改 f2 的类型,但该函数出现在其他上下文中,因此我想编写它的类型而不参考特定调用函数的需求。
标签: haskell monads monad-transformers