[Haskell-cafe] Re: about Haskell code written to be "too smart"

Jonathan Cast jonathanccast at fastmail.fm
Wed Mar 25 11:25:40 EDT 2009


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




More information about the Haskell-Cafe mailing list