[Haskell-cafe] Why is $ right associative
instead ofleftassociative?
Lennart Augustsson
lennart at augustsson.net
Sun Feb 5 09:12:48 EST 2006
John Hughes wrote:
> > Quoting Paul Hudak <paul.hudak at yale.edu>:
> >
> >> Actually, one of the main reasons that we chose (:) is that that's what
> >> Miranda used. So, at the time at least, it was not entirely clear what
> >> the "de facto universal inter-language standard" was.
> >
>
> Phil Wadler argued for the ML convention at the time, and wrote a document
> containing a fair amount of sample code to illustrate what it would look
> like. We noticed something surprising: instead of (x:xs) and the like, Phil
> had consistently written (x :: xs) -- note the extra spaces. Somehow, using
> the longer operator name led him to feel spaces were needed around it. That
> in turn made his lines longer, encouraged him to split definitions across
> lines, and so on. When I read the thing, I realised after a while that I
> was
> skipping all the code fragments -- because they just looked too big and
> complicated to take in during a quick reading. It was at least partly that
> experience that convinced us that using :: for cons would impose a small
> cost, but a real one, on readability. It may seem trivial, but the sum of
> many such decisions is significant. The story does illustrate the
> importance
> of actually trying out syntactic ideas and seeing how they play--one can be
> surprised by the result.
And at the time I agreed with you. But now I'm older and wiser(?).
I now think :: for type signatures was a bad mistake.
I don't use lists very much. They are not the right data structure
for many things. So : is not as common as :: in my code.
I checked a small sample of code, about 20000 lines of Haskell.
It has about 1000 uses of ':' and 2000 of '::'.
In my opinion all the special syntactic sugar for lists should go
away. I don't think lists are special enough to motivate it.
But this is not what Haskell' is about. It's supposed to be some
modest extensions to Haskell. Not designing a new perfect language.
-- Lennart
More information about the Haskell-Cafe
mailing list