[Haskell-cafe] questions on lazy pattern, StateT monad

Wolfgang Jeltsch wolfgang at jeltsch.net
Thu Nov 24 05:46:36 EST 2005


Am Mittwoch, 23. November 2005 10:03 schrieb Fan Wu:
> Hi Haskell gurus,
>
> I'm very puzzled on some code I saw in GHC Monad.StateT (which is
> about state monad transformers) source and hope you can kindly give me
> some insight into this.
>
> newtype StateT s m a  = S (s -> m (a,s))
>
> instance MonadPlus m => MonadPlus (StateT s m) where
>   mzero             = lift mzero
>   mplus m1 m2       = do s <- peek
>                          let m1' = runState s m1
>                              m2' = runState s m2
>           ???????---->   ~(a,s') <- lift (mplus m1' m2')
>                          poke s'
>                          return a

Is this a new implementation of state transformers since I'ver never heard 
about peek and poke before (only get and put) and also thought that the 
argument order of runState was the other way round?  If yes, why did this new 
library retain this terrible naming of monad types?  Values of State don't 
denote states but state *transformers*.  I like to use significant variable 
names in my code and therefore I often use just the type name as a variable 
name.  So a value of type State would sometimes be named "state".  But what 
if I also have a variable that denotes a state?

> [...]

Best wishes,
Wolfgang


More information about the Haskell-Cafe mailing list