[Haskell] Re: Global Variables and IO initializers

Krasimir Angelov ka2_mail at yahoo.com
Mon Nov 8 07:38:43 EST 2004


    As I know the ST monad doesn't provide
getState/setState functions. In order to get this kind
of overloading we need to put all functions that deal
with references in type class:

class MonadRef m r where
  readRef :: r a -> m a
  writeRef :: a -> r a -> m ()

I guess that this is an overkill since we can just
define IO as

type IO a = ST RealWorld a

Krasimir


--- Keean Schupke <k.schupke at imperial.ac.uk> wrote:

> 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.
> 
> 
> 
> _______________________________________________
> Haskell mailing list
> Haskell at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell
> 



		
__________________________________ 
Do you Yahoo!? 
Check out the new Yahoo! Front Page. 
www.yahoo.com 
 



More information about the Haskell mailing list