Ross Paterson wrote: > On Mon, Jan 19, 2009 at 01:13:37PM -0800, Jonathan Cast wrote: > >> (On the other hand, your hunch that lift = return is correct --- so you >> get a cookie for that; it's just that return here is neither the return >> of the monad for m nor the return of the monad for ReaderT m. It is, >> instead, the return of the *applicative functor* --- on the category of >> monads and monad homomorphisms --- associated to the monad transformer >> ReaderT.) >> > > It's also a monad in the category of monads, as are ErrorT, StateT and > WriteT (see Moggi, An Abstract View of Programming Languages, 1989, s4). > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > Monads in the (2-)category of monads correspond to distributive laws (see Formal theory of Monads by Street, 1972). StateT does not arise from a distributive law. In particular, you would need a map
tjoin :: Monad m => StateT (StateT m) a -> StateT m a :: Monad m = (s -> s -> m ((a,s),s)) -> s -> m (a,s) subject to the monad laws (where lift :: Monad m => m a -> StateT m a is the unit, i.e. return) All the best - Mauro This message has been checked for viruses but the contents of an attachment may still contain software viruses, which could damage your computer system: you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe