Sridhar Ratnakumar
Sridhar Ratnakumar

Reputation: 85442

Finding explicit imports for ghc's -Wmissing-import-lists

GHC generates warnings when there are implicit imports (see below). The goal is to replace these with explicit imports. Is there an automated way to generated the list (instead of manually finding it in code)?

/Users/srid/code/slownews/backend/src/SlowNews/Main.hs:10:1: warning: [-Wmissing-import-lists]
    The module ‘Control.Exception’ does not have an explicit import list
   |
10 | import           Control.Exception
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/Users/srid/code/slownews/backend/src/SlowNews/Main.hs:13:1: warning: [-Wmissing-import-lists]
    The module ‘Control.Monad.IO.Class’ does not have an explicit import list
   |
13 | import           Control.Monad.IO.Class
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Upvotes: 6

Views: 313

Answers (3)

Steven Shaw
Steven Shaw

Reputation: 6249

The Haskell Tools project has some nice looking tooling for that. Apparently it works in Atom but I couldn't get it to work with atom or atom-beta on macOS. However, it does work at the command line. I have a simple example stack project set up. The Main.hs uses an explicit import list:

module Main where

import System.Environment

doMain = print =<< getEnvironment

main = doMain

BTW, I installed the Haskell Tools with:

$ stack install haskell-tools-daemon haskell-tools-cli fswatch

Then execute:

$ ht-refact -e 'ProjectOrganizeImports' .

Now git tells me that I have the following diff:

-import System.Environment
+import System.Environment (getEnvironment)

Check out the Haskell Tools website for an interactive example of how it should work in an editor. Looks like a very promising set of refactoring tools.

Upvotes: 0

Shersh
Shersh

Reputation: 9179

There's an open pull request un importify tool which I'm working on. After this is done you will be able to convert implicit imports to explicit automatically:

https://github.com/serokell/importify/pull/82

Upvotes: 1

Daniel Wagner
Daniel Wagner

Reputation: 153102

GHC has a -ddump-minimal-imports flag which will do the trick.

Upvotes: 6

Related Questions