why is this legal
Sat, 2 Feb 2002 12:22:10 -0500
Martin Norbäck wrote:
| However, it's extremely common to write code like this:
| f expr = case expr of
| EXPR_NOT expr -> something with expr
| EXPR_UNARY_MINUS expr -> something with expr
| not allowing this would make the programmer have to invent new names
| here. I had to turn off this warning for the project we do at work,
| because the compiler would emit hundreds of warnings for cases like
| this. Changing all bound names was not a good option.
I agree with Antony on that compilers should emit warnings on
potentially-dangerous usages. Anyone working on a lint for Haskell? :-)
It would be a valuable contribution to our community.
On the other hand, I think Martin has a reasonable concern. However, note
that in Hal's original example:
| f x = f' 0 x
| where f' acc  = acc
| f acc (x:xs) = f' (x+acc) xs
the inner f is never used. Therefore I believe -fwarn-unused-local-binding
(if there is such an option) will detect the bug in Hal's code without
flooding stderr in Martin's case.