[GHC] #8363: Order matters for unused import warnings when reexporting identifiers

GHC ghc-devs at haskell.org
Thu Sep 26 14:00:51 CEST 2013


#8363: Order matters for unused import warnings when reexporting identifiers
------------------------------------+-------------------------------------
       Reporter:  bergmark          |             Owner:
           Type:  bug               |            Status:  new
       Priority:  normal            |         Milestone:
      Component:  Compiler          |           Version:  7.7
       Keywords:                    |  Operating System:  Unknown/Multiple
   Architecture:  Unknown/Multiple  |   Type of failure:  None/Unknown
     Difficulty:  Unknown           |         Test Case:
     Blocked By:                    |          Blocking:
Related Tickets:                    |
------------------------------------+-------------------------------------
 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.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8363>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list