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

Simon Marlow marlowsd at gmail.com
Wed Mar 25 11:32:23 EDT 2009

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!  (and you have the a and s the 
wrong way around in 'case s a', BTW).

>> 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 (,)


More information about the Haskell-Cafe mailing list