Hi all,

for my current project I need a monad that is an instance of MonadIO, MonadReader, MonadWriter, MonadState, and MonadError. I see two ways for defining such a monad using the mtl.

1) type MyMonad = ErrorT E (RWST R W S IO)

and

2) type MyMonad = RWST R W S (ErrorT E IO)

I can't figure out what is the difference between these two definitions and therefore which one is more suitable for my problem. Or are the equivalent and it is unimportant which one I use?

Or is it even better define a new type like

newtype MyMonad a = MyMonad { runMyMonad :: R -> S -> IO (Either E a,S,W) }

and declare instances for all 5 type classes?

Thanks for your help in advance,

Martin.

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to