why is this legal
Sat, 2 Feb 2002 5:46:08 -0500
> From: Hal Daume III <hdaume@ISI.EDU>
> then, why are we allowed to rebind f in a let clause :)
1. There is no real reason not to allow this, so such a
rule would just limit the flexibility of the language and
annoy programmers. It would also make it somewhat harder
to write compilers, because they would have to check
uselessly for violations of an extra rule.
2. It increases the ability to move code around without
changing it. For example, suppose you have
g = let f = 5 in ...
f x = ... g ....
Now let's say you realize you only ever use g in f. So
you have no need to clutter the top-level namespace with
g. So you can cut and paste to make
f x = ... (let f = 5 in ...) ...
There is another, possibly more significant reason,
however: sometimes it is very nice to be able to "shadow"
an external variable (including perhaps the function being
defined) in a function definition: it explicitly prevents
you from using that variable by mistake. This technique
is often used to avoid bugs in loop code (though this is
not specifically a reason to allow rebinding of the thing
This message has been brought to you by the letter alpha and the number pi.