On Mon, Jun 22, 2009 at 12:06 PM, Malcolm Wallace < malcolm.wall...@cs.york.ac.uk> wrote:
> Erik de Castro Lopo <mle...@mega-nerd.com <mle%2...@mega-nerd.com>> wrote: > > > Vasili I. Galchin wrote: > > > > > "where/let" functions use the > > > same name for function parameters as the outer function and hence > > > there is a "shadow" warning from the compiler. > > > > In Haskell there is an easy way around this. Variables can > > be name a, a', a'' and so on. ... > > ... its a good idea to fix these warnings. > > I would _strongly_ advise not to do that. By trying to silence the > spurious warning about shadowing, there is enormous potential to > introduce new bugs that were not there before. > > Example: > > f a b = g (a+b) (b-a) > where g a c = a*c > > ghc warns that g's parameter a shadows the parameter to f. So we > introduce a primed identifier to eliminate the warning: > > f a b = g (a+b) (b-a) > where g a' c = a*c > > Now, no warnings! But, oops, this function does not do the same thing. > We forgot to add a prime to all occurrences of a on the right-hand-side. > Actually there's a warning: ghci> let f a b = g (a+b) (b-a) where g a' c = a*c <interactive>:1:34: Warning: Defined but not used: `a'' Cheers, Johan
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe