[Haskell-cafe] Re: Why is $ right associative instead ofleftassociative?

John Meacham john at repetae.net
Sun Feb 5 20:30:53 EST 2006

On Sun, Feb 05, 2006 at 06:50:57PM +0000, Ben Rudiak-Gould wrote:
> Paul Hudak wrote:
> >Minor point, perhaps, but I should mention that : is not special syntax 
> >-- it is a perfectly valid infix constructor.
> But Haskell 98 does treat it specially: you can't import Prelude hiding 
> ((:)), or rebind it locally, or refer to it as Prelude.:. In fact I've 
> always wondered why it was done this way. Can anyone enlighten me? Of 
> course it might be confusing if it were rebound locally, but no more 
> confusing than the fact that [f x | x <- xs] is not the same as (map f xs).
> It might be kind of nice if the list type were actually defined in the 
> Prelude as
>     data List a = Nil | a : List a
> and all of the special [] syntax defined by a desugaring to this (entirely 
> ordinary) datatype, e.g. [1,2] -> 1 Prelude.: 2 Prelude.: Prelude.Nil.

it would probably be simpler just to declare [] to be a data
constructor. that is what jhc does, it parses the same as any
capitalized name. so you can do

import Prelude hiding([])

data Foo a = [] | Foo | Bar

and list syntax desugars into whatever (:) and [] are in scope.

similarly, (x,y) is just sugar for (,) x y and (,) is a standard data
constructor and can be hidden, redefined, etc just like any other one.


John Meacham - ⑆repetae.net⑆john⑈

More information about the Haskell-Cafe mailing list