Обновление внешней монады только в преобразователе монады

У меня есть монада для вычисления, которое может дать сбой, и которое ведет ведение журнала:

f1 :: WriterT [String] (Either String) a

У меня есть функция, которая не завершается ошибкой, но выполняет ведение журнала:

f2 :: Writer [String] b

] Каков наилучший способ обновить монаду записи в f1, используя журнал из f2, и зафиксировать вывод вычислений f2? В настоящий момент я делаю следующее:

f2result <- (\(r,l) -> do {tell l; return r}) (runWriter f2)

Я использую lift для обновления внутренней монады с другим вычислением, поэтому переключение между монадами Writer и Someone не решит проблему.

7
задан mskel 14 March 2012 в 13:48
поделиться