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