@@ -38,15 +38,16 @@ findUnusedImports :: forall m. (Applicative m, MonadError MultipleErrors m, Mona
3838findUnusedImports (Module _ _ _ mdecls mexports) env usedImps = do
3939 imps <- findImports mdecls
4040 forM_ (M.toAscList imps) $ \(mni, decls) -> unless (mni `elem` alwaysUsedModules) $
41− forM_ decls $ \(ss, declType, qualifierName) -> censor (onErrorMessages $ addModuleLocError ss) $
42− let usedNames = mapMaybe (matchName (typeForDCtor mni) qualifierName) $ sugarNames mni ++ M.findWithDefault [] mni usedImps in
43− case declType of
44− Implicit -> when (null usedNames) $ tell $ errorMessage $ UnusedImport mni
45− Explicit declrefs -> do
46− let idents = mapMaybe runDeclRef declrefs
47− let diff = idents \\ usedNames
48− unless (null diff) $ tell $ errorMessage $ UnusedExplicitImport mni diff
49− _ -> return ()
41+ forM_ decls $ \(ss, declType, qualifierName) ->
42+ censor (onErrorMessages $ addModuleLocError ss) $ unless (qnameUsed qualifierName) $
43+ let usedNames = mapMaybe (matchName (typeForDCtor mni) qualifierName) $ sugarNames mni ++ M.findWithDefault [] mni usedImps in
44+ case declType of
45+ Implicit -> when (null usedNames) $ tell $ errorMessage $ UnusedImport mni
46+ Explicit declrefs -> do
47+ let idents = mapMaybe runDeclRef declrefs
48+ let diff = idents \\ usedNames
49+ unless (null diff) $ tell $ errorMessage $ UnusedExplicitImport mni diff
50+ _ -> return ()
5051 where
5152 sugarNames :: ModuleName -> [ Name ]
5253 sugarNames (ModuleName [ProperName n]) | n == C.prelude = [ IdentName $ Qualified Nothing (Ident C.bind) ]
@@ -59,6 +60,10 @@ findUnusedImports (Module _ _ _ mdecls mexports) env usedImps = do
5960 isExport (ModuleRef mn) = Just mn
6061 isExport _ = Nothing
6162
63+ qnameUsed :: Maybe ModuleName -> Bool
64+ qnameUsed (Just qn) = qn `elem` alwaysUsedModules
65+ qnameUsed Nothing = False
66+
6267 typeForDCtor :: ModuleName -> ProperName -> Maybe ProperName
6368 typeForDCtor mn pn =
6469 getTy <$> find matches tys