Ho una monade per un calcolo che può mancare e fa qualche registrazione:Aggiornamento monad esterno solo trasformatore monade
f1 :: WriterT [String] (Either String) a
Ho una funzione che non mancherà ma fa qualche registrazione:
f2 :: Writer [String] b
Qual è il modo migliore per aggiornare il monad writer in f1 utilizzando il log da f2 e acquisire l'output del calcolo f2? Al momento sto facendo questo:
f2result <- (\(r,l) -> do {tell l; return r}) (runWriter f2)
Sto usando ascensore per aggiornare la monade interno con un calcolo diverso, per cui il passaggio intorno allo scrittore e monadi o non risolverà il problema.
Grazie danr e rampion per le vostre risposte. Ho scelto di usare il metodo wrap. Anche se potrei cambiare il tipo di f2, quella funzione appare in altri contesti, quindi mi piacerebbe scrivere il suo tipo senza fare riferimento alle esigenze di una particolare funzione di chiamata. – mskel