[Haskell-cafe] Why is $ right associative instead of
leftassociative?
Brian Hulley
brianh at metamilk.com
Sat Feb 4 15:59:56 EST 2006
Tomasz Zielonka wrote:
> On Sat, Feb 04, 2006 at 07:15:47PM -0000, Brian Hulley wrote:
>> I think the mystery surrounding :: and : might have been that
>> originally people thought type annotations would hardly ever be
>> needed whereas list cons is often needed, but now that it is
>> regarded as good practice to put a type annotation before every top
>> level value binding, and as the type system becomes more and more
>> complex (eg with GADTs etc), type annotations are now presumably far
>> more common than list cons so it would be good if Haskell Prime
>> would swap these operators back to their de facto universal
>> inter-language standard of list cons and type annotation
>> respectively.
>
> I am not convinced. Even if you really want to write types for every
> top-level binding, it's only one :: per binding, which can have a
> definition spanning for many lines and as complicated type as you
> want. On the other hand, when you are doing complicated list
> processing, it is not uncommon to have four (or more) :'s per _line_.
I wonder if extending the sugared list syntax would help here. The | symbol
is used for list comprehensions but something along the lines of:
[a,b,c ; tail] === a :: b :: c :: tail -- where ::
means list cons
then there would seldom be any need to use the list cons symbol anywhere
except for sections. I would use "," instead of ";" in the block syntax so
that ";" could be freed for the above use and so that there would be a
generic block construct {,,,} that could be used for records also (and could
always be replaced by layout) eg
P {x=5, y=6}
could be written also as
P # -- # allows a layout block to be started
x = 5
y = 6
>
> Personally, I started my FP adventure with OCaml (which has the thing
> the other way around), and I felt that the meanings of :: and : should
> be reversed - before I even knew Haskell!
I see what you mean ;-). However the swapping of :: and : really is very
confusing when one is used to things being the other way round. Also in
natural language, ":" seems to have a much closer resonance with the
type/kind annotation meaning than with constructing a list. I also wonder if
it is such a good idea to make lists so special? Does this influence our
thinking subconciously to use list-based solutions when some other data
structure may be better?
Regards, Brian.
More information about the Haskell-Cafe
mailing list