[Haskell-cafe] Verbosity of imperative code (was: Learning Haskell)

Robin Green greenrd at greenrd.org
Thu Dec 8 03:46:28 EST 2005


On Thursday 08 December 2005 07:33, you wrote:
> > seqPair $= (,)
> >
> > or (the slightly less cryptic version)
> >
> > seqPair x y $= (x, y)
>
> Wouldn't they be different, the first one forcing (,) to WHNF (NOP), and
> the second one forcing x and y to WHNF?

No. Oh, $= also breaks type inferencing :) So you have to specify the type of 
the function explicitly.

> Would you want seqPair written with $= to still have a type involving
> the Monad class?

That's the idea, yes. The type of the function does not change, only the way 
you write it changes when you use $= (again, this is all just a proposal at 
present).

> > This is not referentially transparent because it is not equivalent to
> >
> > seqPair x y $= swap (y, x) where swap (a, b) = (b, a)
> >
> > (can you see why not?)
>
> Only guessing, because I am not sure what $= is supposed to do, but
> is it because y would be evaluated before x?

Yup.

Well, that's one possible semantics of $=. A better semantics might reject the 
above expression as ambiguous.

> Anyway, I didn't think my initial statement was so controversial.
> I even said "may", not "will".

Sure, I take your point. But I just jumped on my latest hobby-horse: verbosity 
of imperative code is not that necessary.
-- 
Robin


More information about the Haskell-Cafe mailing list