
On Mon, Jul 28, 2003 at 10:51:47PM +0200, Iavor Diatchki wrote:
Another issue: typically one works with a stack of transformers sitting on a base monad. You have functions for adding or removing a transformer from the top of the stack, and for manipulating the base monad. It might also be useful to have something to remove a State transformer from anywhere in the stack, etc. i've tried to do things like that, but i can't figure out a way to achieve them. what would be the type of such a function?
class (MonadState s m, Monad m') => MonadWithState s m m' | m -> m' where liftState :: m' a -> m a runState :: s -> m a -> m' (a,s) instance Monad m => MonadWithState s (StateT s m) m instance MonadWithState s m m' => MonadWithState s (ErrorT e m) (ErrorT e m') ... and similarly for the rest. (Instances that use the same type constructor twice are an embarrassment for Haddock, though.)