
On Tue, 2008-05-06 at 10:09 +0100, Simon Peyton-Jones wrote:
There is something more substantial here. Suppose we have
module Foo( g ) where import Bar( f4 ) f1 = f2 f2 = f3 f3 = f4 g = 7
At the moment GHC takes the view that f1,f2,f3,f4, and the import are *all* unused. If we said that just f1 was unused, then you'd delete it and get a new warning about f2; you delete that and get a new warning about f3; and so on.
Yet the current behaviour is clearly confusing, even to a clued-up user, let alone a beginner.
Perhaps to eliminate the confusion we just need to distinguish directly unused and indirectly unused in the warning message: Foo.hs:3:8: Warning: Defined but not used: `f1' Foo.hs:4:8: Warning: Defined but used only by other things that are themselves unused: `f2' Foo.hs:5:8: Warning: Defined but used only by other things that are themselves unused: `f3' (suggestions for better messages text welcome) and similarly for the unused import. Duncan