[Haskell] a newbie question
tpledger at ihug.co.nz
Mon Apr 26 22:25:26 EDT 2004
Ben_Yu at asc.aon.com wrote:
>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.
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