
John Hughes wrote:
That's the reason Haskell has two binding constructions.
Its a reason why it was a good decision to have both constructs. There was some debate about which to have - it's a matter of personal preference and style. The problem is that if you have both let and where in the expression syntax, then let a in b where c is ambiguous unless you make an arbitrary decision about the precedence, and that kind of arbitrariness is an opportunity for error - the programmer mis-remembers the rule and gets a syntactically valid program that does not do what was intended. I always though that the resolution, allowing both but making where part of the declaration syntax, thus both having a justification for the parsing order and creating a means to write local definitions which span guarded equations, was a very fine decision. --brian