我有一个单子用于计算可能会失败并进行一些日志记录:
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 不会解决问题。