First, I am happy to see that Haskell 1.3, with its many valuable
improvements over Haskell 1.2, is finally getting ready,
but I also have a comment:

In the syntax for labeled fields (records) the symbol <- is chosen
as the operator used to associate a label with a value in
constructions and patterns:

        data Date = Date {day, month, year :: Int}

        today = Date{day <- 11, month <- 10, year <- 1995}

According to a committee member, there were no convincing reasons
why <- was chosen. Other symbols, like = and := were also considered.

Here are some (in my opinion) good reasons for using = instead of <- :

1. In ordinary declarations, :: is used to specify the type of a name
   and = is used to specify its value:

        day, month, year :: Int
        day = 11; month = 10; year = 1995

   so for consistency I think the same notations should be used
   inside record values:

        data Date = Date {day, month, year :: Int}
        date :: Date
        date = Date {day = 11, month = 10, year = 1995}

2. The <- symbol is used also in list comprehensions and the new
   monad syntax ('do'):

        [ 2*x | x <- [1..10] ]

        do c <- getChar; putChar c

   In these uses of <- the name on the lhs does not have the same
   type as the expression on the rhs (above, x::Int, but [1..10]::[Int]
   and c::Char but getChar::IO Char). The value that the lhs name
   (or, indeed, pattern) is bound to is "extracted" from the value
   of the rhs expression. This is very different from what happens
   with field labels, so a difference in syntax is motivated.

Sadly, I suspect it would be difficult to convince the committee to
change their minds about this at this late stage, but I am sure it
would be even more difficult to change it for a later version of


Thomas Hallgren

Reply via email to