Order matters for unused import warnings when reexporting identifiers
Import order seem to change whether unused import warnings trigger when a module re-exports an identifier, with another module importing it and another module exporting the same identifier.
Reproduction:
module Foo ( (<$>) , g ) where
import Control.Applicative
g :: Int
g = 1
module Main where
import Control.Applicative
import Foo
main :: IO ()
main = print =<< ((+2) <$> return g)
$ ghc -fwarn-unused-imports Main.hs
[1 of 2] Compiling Foo ( Foo.hs, Foo.o )
[2 of 2] Compiling Main ( Main.hs, Main.o )
Linking Main ...
If Main is not using g
then this gives a warning that the import of Foo
is redundant.
If we switch the order of the imports we do get the warning:
module Main where
import Foo
import Control.Applicative
main :: IO ()
main = print =<< ((+2) <$> return g)
> ghc -fwarn-unused-imports Main.hs
[1 of 2] Compiling Foo ( Foo.hs, Foo.o )
[2 of 2] Compiling Main ( Main.hs, Main.o )
Main.hs:4:1:
Warning: The import of `Control.Applicative' is redundant
except perhaps to import instances from `Control.Applicative'
To import instances alone, use: import Control.Applicative()
Linking Main ...
I expected both versions of Main to produce the same warning. Tested on GHC 7.7.20130824 and 7.4.2.
Trac metadata
Trac field | Value |
---|---|
Version | 7.7 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |