diff --git a/haddock-api/src/Haddock/Interface.hs b/haddock-api/src/Haddock/Interface.hs
index 8c3ecac9e9bdce6c011004ee49064c5a142f942c..45573906692d3a4c2ea107505a400b8d37d76eab 100644
--- a/haddock-api/src/Haddock/Interface.hs
+++ b/haddock-api/src/Haddock/Interface.hs
@@ -34,22 +34,24 @@ module Haddock.Interface (
 ) where
 
 
-import Haddock.GhcUtils
-import Haddock.Interface.AttachInstances
-import Haddock.Interface.Create
-import Haddock.Interface.Rename
-import Haddock.InterfaceFile
+import Haddock.GhcUtils (moduleString, pretty)
+import Haddock.Interface.AttachInstances (attachInstances)
+import Haddock.Interface.Create (createInterface1, runIfM)
+import Haddock.Interface.Rename (renameInterface)
+import Haddock.InterfaceFile (InterfaceFile, ifInstalledIfaces, ifLinkEnv)
 import Haddock.Options hiding (verbosity)
-import Haddock.Types
-import Haddock.Utils
-
-import Control.Monad
-import Control.Monad.IO.Class (MonadIO(liftIO))
-import Data.IORef
+import Haddock.Types (DocOption (..), Documentation (..), ExportItem (..), IfaceMap, InstIfaceMap, Interface, LinkEnv,
+                      expItemDecl, expItemMbDoc, ifaceDoc, ifaceExportItems, ifaceExports, ifaceHaddockCoverage,
+                      ifaceInstances, ifaceMod, ifaceOptions, ifaceVisibleExports, instMod, runWriter, throwE)
+import Haddock.Utils (Verbosity, normal, out, verbose)
+
+import Control.Monad (unless, when)
+import Control.Monad.IO.Class (MonadIO, liftIO)
+import Data.IORef (atomicModifyIORef', newIORef, readIORef)
 import Data.List (foldl', isPrefixOf, nub)
-import Text.Printf
 import qualified Data.Map as Map
 import qualified Data.Set as Set
+import Text.Printf (printf)
 
 import GHC hiding (verbosity)
 import GHC.Data.FastString (unpackFS)
@@ -57,7 +59,7 @@ import GHC.Data.Graph.Directed
 import GHC.Driver.Monad (modifySession)
 import GHC.Driver.Session hiding (verbosity)
 import GHC.Driver.Types (isBootSummary)
-import GHC.HsToCore.Docs
+import GHC.HsToCore.Docs (getMainDeclBinder)
 import GHC.Plugins (HscEnv (..), Outputable, Plugin (..), PluginWithArgs (..), StaticPlugin (..), defaultPlugin,
                     keepRenamedSource)
 import GHC.Tc.Types (TcGblEnv (..), TcM)
@@ -71,9 +73,9 @@ import GHC.Unit.Types (IsBootInterface (..))
 import GHC.Utils.Error (withTimingD)
 
 #if defined(mingw32_HOST_OS)
-import System.IO
 import GHC.IO.Encoding.CodePage (mkLocaleEncoding)
-import GHC.IO.Encoding.Failure (CodingFailureMode(TransliterateCodingFailure))
+import GHC.IO.Encoding.Failure (CodingFailureMode (TransliterateCodingFailure))
+import System.IO
 #endif
 
 -- | Create 'Interface's and a link environment by typechecking the list of
diff --git a/haddock-api/src/Haddock/Interface/Create.hs b/haddock-api/src/Haddock/Interface/Create.hs
index 671772012731927149f27a32b921c04755cd0f53..92ea0e9df60610309066216711e3b0539c7f60e6 100644
--- a/haddock-api/src/Haddock/Interface/Create.hs
+++ b/haddock-api/src/Haddock/Interface/Create.hs
@@ -31,43 +31,44 @@
 module Haddock.Interface.Create (IfM, runIfM, createInterface1) where
 
 import Documentation.Haddock.Doc (metaDocAppend)
-import Haddock.Convert
-import Haddock.GhcUtils
+import Haddock.Convert (PrintRuntimeReps (..), tyThingToLHsDecl)
+import Haddock.GhcUtils (addClassContext, filterSigNames, lHsQTyVarsToTypes, mkEmptySigWcType, moduleString, parents,
+                         pretty, restrictTo, sigName)
 import Haddock.Interface.LexParseRn
-import Haddock.Options
+import Haddock.Options (Flag (..), modulePackageInfo)
 import Haddock.Types hiding (liftErrMsg)
-import Haddock.Utils
+import Haddock.Utils (replace)
 
-import Control.Monad.Catch
-import Control.Monad.Reader
+import Control.Monad.Catch (MonadCatch, MonadThrow)
+import Control.Monad.Reader (MonadReader (..), ReaderT (..), asks)
 import Control.Monad.Writer.Strict hiding (tell)
-import Data.Bitraversable
+import Data.Bitraversable (bitraverse)
 import Data.List (find, foldl')
 import Data.Map (Map)
-import Data.Maybe
-import Data.Traversable
-import GHC.Stack (HasCallStack)
 import qualified Data.Map as M
+import Data.Maybe (catMaybes, fromJust, isJust, mapMaybe, maybeToList)
+import Data.Traversable (for)
+import GHC.Stack (HasCallStack)
 
 import GHC hiding (lookupName)
 import GHC.Core.Class (ClassMinimalDef, classMinimalDef)
 import GHC.Core.ConLike (ConLike (..))
 import GHC.Data.FastString (bytesFS, unpackFS)
-import GHC.Driver.Types
+import GHC.Driver.Types (HscSource (..), WarningTxt (..), Warnings (..), msHsFilePath)
 import GHC.HsToCore.Docs hiding (mkMaps)
 import GHC.Parser.Annotation (IsUnicodeSyntax (..))
 import GHC.Tc.Types hiding (IfM)
 import GHC.Tc.Utils.Monad (finalSafeMode)
 import GHC.Types.Avail hiding (avail)
-import GHC.Types.Basic (PromotionFlag (..), SourceText (..), StringLiteral (..))
-import GHC.Types.Name
-import GHC.Types.Name.Env
-import GHC.Types.Name.Reader
-import GHC.Types.Name.Set
-import GHC.Unit.State
 import qualified GHC.Types.Avail as Avail
+import GHC.Types.Basic (PromotionFlag (..), SourceText (..), StringLiteral (..))
+import GHC.Types.Name (getOccString, getSrcSpan, isDataConName, isValName, nameIsLocalOrFrom, nameOccName)
+import GHC.Types.Name.Env (lookupNameEnv)
+import GHC.Types.Name.Reader (GlobalRdrEnv, globalRdrEnvElts, gre_name, gresToAvailInfo, isLocalGRE, lookupGlobalRdrEnv)
+import GHC.Types.Name.Set (elemNameSet, mkNameSet)
 import qualified GHC.Types.SrcLoc as SrcLoc
 import qualified GHC.Unit.Module as Module
+import GHC.Unit.State
 import qualified GHC.Utils.Outputable as O