Qualified Prelude and -Wdodgy-exports
Summary
When reexporting symbols from Prelude from some module A, then further reexporting A from another module which also imports the Prelude qualified, -Wdodgy-exports can be triggered. This pattern of reexporting shows up often in "alternate Preludes".
Steps to reproduce
Produce a module Fun:
module Fun
( Data.Bool.Bool(..) -- A symbol also present in Prelude
) where
import qualified Data.Bool
now produce a module Lib:
module Lib
( module Fun -- reexports Bool
) where
import qualified Fun
-- import qualified Prelude
Compile with -Wall, and see no warnings. Now uncomment the qualified import of Prelude and see the following:
/home/colin/code/haskell/dodgy-bug/src/Lib.hs:2:5-14: warning: [-Wdodgy-exports]
The export item ‘module Fun’ exports nothing
|
2 | ( module Fun
| ^^^^^^^^^^
/home/colin/code/haskell/dodgy-bug/src/Lib.hs:5:1-20: warning: [-Wunused-imports]
The qualified import of ‘Fun’ is redundant
|
5 | import qualified Fun
| ^^^^^^^^^^^^^^^^^^^^
/home/colin/code/haskell/dodgy-bug/src/Lib.hs:6:1-24: warning: [-Wunused-imports]
The qualified import of ‘Prelude’ is redundant
|
6 | import qualified Prelude
| ^^^^^^^^^^^^^^^^^^^^^^^^
Now remove the qualified section of the Prelude import, and see no warnings. The presence/absence of NoImplicitPrelude seems to have no effect here.
Expected behavior
I'd expect no warnings in any of the three cases.
Environment
- GHC version used: 8.6.5
Optional:
- Operating System: Arch Linux
- System Architecture: x86_64