Hi there.
I got this question while I'm messing around with my toy monad.
I was thinking about creating a generic monad that can persist state change even when fail is called. The StateT monad will discard the state change so it makes it hard to add tracing to the program. (at least to me. If there's any nice way of doing this, please kindly instruct me.)
Hi.
The following uses a writer monad instead of a state monad for tracing, but I think the reverse-the-order-of-the-monad-transformers trick works with state monads too.
import Control.Monad.Error import Control.Monad.Writer
test :: (MonadError String m, MonadWriter String m) => m () test = tell "trace" >> throwError "custard"
errorWrapsWriter :: (Either String (), String) errorWrapsWriter = runWriter (runErrorT test)
writerWrapsError :: Either String ((), String) writerWrapsError = runWriterT test
Regards, Tom
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell