
Dan Piponi wrote:
On 8/30/07, Andrew Coppin
wrote: Obviously you might very well have *meant* to write x = f x. But would it be possible to add some kind of optional compiler warning to find such assignments?
The thing that convinced me to learn Haskell in the first place was the fact that you could write x = f x. Equations where you refer to the same variable on the left and right hand sides are the bread of butter and mathematics, and I was really pleased to find a programming language that let me do the same.
Yeah, but... programs aren't like mathematics. I know people claim that they are, but they aren't. In mathematics, if you write "x = f y" you mean that these two expressions are equal. In Haskell, if you say "x = f y" you mean *make* then equal! (Let us not even go into the times when expressions like "z = f z" actually means "z[n+1] = f [z]"...)
So to me the idea of having a warning for this is a bit like putting a sign on bottled water saying "Warning: Contents may be wet". But that's just me. :-)
Well, it's definitely a valid thing to want to do, which is why I asked for a *warning* not an error. ;-) Still, this seems to be an extremely common way for me to hurt myself, so...
Still, it might be useful to for the compiler to warn when a newly introduced name shadows another one.
...or that...