Re: [Haskell-cafe] Why no IO transformer monad?

Perhaps you would care to explain this then? class Runnable m n where run :: m -> n class (Monad m,Monad (t m)) => MonadT t m where up :: m a -> t m a down :: t m a -> m a instance (Monad m,MonadT t m,Monad (t m)) => Runnable (t m a) (m a) where run = down Or perhaps look at the type of the state transformer monad: newtype StateT st m a = ST { runST :: st -> m (st,a) } To me it is quite clear that the return type runST returns "m (st,a)" where m is the _base_ monad so lifting IO through the state-transformer gives: StateT st IO a and applying runST to this type gives: IO (st a)... Keean. Udo Stenzel wrote:
Keean Schupke
schrieb am 20.12.04 12:13:08: I thought you would get the following if you have a transformer 'M':
runM :: M IO a -> IO a
That's what I thought, too. But it's the other way 'round. Well, I can't comment on _why_ it's so counter-intuitive, but I'm pretty sure, the outermost transformer appears innermost in the final type. It all makes sense somehow, you just have to remember that transformer types are somehow written backwards.
Udo. __________________________________________________________ Mit WEB.DE FreePhone mit hoechster Qualitaet ab 0 Ct./Min. weltweit telefonieren! http://freephone.web.de/?mc=021201
participants (1)
-
Keean Schupke