Less noisy version of -fwarn-name-shadowing
I would like a flag that warns about name-shadowing in more restricted circumstances than the current flag. I.e. I would like examples like these not to produce a warning:
foo x = ..
where
bar x = ...
baz z = do
z <- .... z ...
return z
But I would like these to produce one:
foo x = ..
where
x = ... x ...
baz z = mdo
z <- .... z ...
return z
Basically warn when a definition shadows *itself*. My motivation is that code like my first two examples is almost never an error in my experience, but my last two examples almost always are examples of my accidentally building a loop that evaluates to |.