
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.
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) You'll never worry about the order of components of a pair again. This function is as indispensable as flip. jcc