[Haskell] Re: Global Variables and IO initializers

Keean Schupke k.schupke at imperial.ac.uk
Mon Nov 8 06:56:20 EST 2004


Krasimir Angelov wrote:

>ered on top of ST and the stToIO is
>the lifting function. What does 'automatically be
>lifted' mean?
>
>  Krasimir
>  
>
For example with the state monad you can define:

instance (MonadState st m,MonadT t m) => MonadState st (t m) where
   update = up . update
   setState = up . setState
   getState = up $ getState

This makes any monad transformer applied to the StateMonad transformer
an instance of the StateMonadTransformer. When you use getState, you
do not have to prefix the lifting, the type checker unwinds the 
instance, and
for each transformer it removes adds a lift.

If is only possible to define the above for some monad-transformers. In 
other
cases the lifts must be specific to the monad-transformer being lifted 
through,
in which case you would define:

instance Monad m => MonadTransX (MonadState m) where
    ...

This would be for lifting functions of MonadTransX through MonadState
specifically.

    Keean.





More information about the Haskell mailing list