On Wed, 2009-03-25 at 15:32 +0000, Simon Marlow wrote: > Jonathan Cast wrote: > > On Wed, 2009-03-25 at 15:09 +0000, Simon Marlow wrote: > >> the ordering that the state monad expects > >> (and I can never remember which way around they are in > >> Control.Monad.State). > > > > Really? I found it obvious once I figured out it how simple it made > > (>>=). With the order from Control.Monad.State (with constructors > > ignored): > > > > a >>= f = \ s -> case s a of > > (x, s') -> f x s' > > > > Reversing the order of the components of the result gives you > > > > a >>= f = \ s -> case s a of > > (s', x) -> f x s' > > > > which just looks weird. > > It might look weird to you, but that's the way that GHC's IO and ST monads > do it. It looks perfectly natural to me!
Right. Consider this an argument for fixing IO/ST(/STM?) to conform to the self-evidently correct ordering of Control.Monad.State :) > (and you have the a and s the > wrong way around in 'case s a', BTW). Um, yes. /Mea culpa/. > >> Try doing it with mapAccumL, which is arguably the right abstraction, > >> but > >> has the components the other way around. > > > > Define > > > > swap (a, b) = (b, a) > > ew, that's far too crude. I think you mean > > swap = uncurry $ flip (,) Ah, yes. jcc _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe