[Haskell] a newbie question

Tom Pledger tpledger at ihug.co.nz
Mon Apr 26 22:25:26 EDT 2004

Ben_Yu at asc.aon.com wrote:

>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.)


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


More information about the Haskell mailing list