@@ -39,27 +39,30 @@ module'
39 :: Module.Interfaces
39 :: Module.Interfaces
40 -> Module.ValidModule
40 -> Module.ValidModule
41 -> R.Result Warning.Warning Error.Error Module.CanonicalModule
41 -> R.Result Warning.Warning Error.Error Module.CanonicalModule
42−module' interfaces modul@(Module.Module _ _ _ (_, imports) _) =
42+module' interfaces modul =
43 let (Result.Result uses rawResults) =
43 let (Result.Result uses rawResults) =
44 moduleHelp interfaces modul
44 moduleHelp interfaces modul
46− unusedImportWarnings =
47− Maybe.mapMaybe (warnUnusedImport uses) imports
49− R.addWarnings unusedImportWarnings $
50− case rawResults of
46+ case rawResults of
51− Result.Ok canonicalModule ->
47+ Result.Ok almostCanonicalModule ->
52− return canonicalModule
48+ filterImports uses almostCanonicalModule
51+ R.throwMany (map (A.map Error.Canonicalize) msgs)
54− Result.Err msgs ->
53+
55− R.throwMany (map (A.map Error.Canonicalize) msgs)
54+type AlmostCanonicalModule =
56+ ([Module.DefaultImport], [Module.UserImport])
59 :: Module.Interfaces
62 :: Module.Interfaces
60 -> Module.ValidModule
63 -> Module.ValidModule
61− -> Result.ResultErr Module.CanonicalModule
64+ -> Result.ResultErr AlmostCanonicalModule
62−moduleHelp interfaces modul@(Module.Module _ _ exports (defaults, imports) decls) =
65+moduleHelp interfaces modul@(Module.Module _ _ exports _ decls) =
63 canonicalModule
66 canonicalModule
64 <$> canonicalDeclsResult
67 <$> canonicalDeclsResult
65 <*> resolveExports locals exports
68 <*> resolveExports locals exports
@@ -67,7 +70,6 @@ moduleHelp interfaces modul@(Module.Module _ _ exports (defaults, imports) decls
67 canonicalModule canonicalDecls canonicalExports =
70 canonicalModule canonicalDecls canonicalExports =
69 { Module.exports = canonicalExports
72 { Module.exports = canonicalExports
70− , Module.imports = map fst defaults ++ map (fst . A.drop) imports
71 , Module.body = body canonicalDecls
73 , Module.body = body canonicalDecls
@@ -108,14 +110,26 @@ moduleHelp interfaces modul@(Module.Module _ _ exports (defaults, imports) decls
109-- IMPORTS / EXPORTS
111-- IMPORTS / EXPORTS
111−warnUnusedImport
113+filterImports
112 :: Set.Set Module.Name
114 :: Set.Set Module.Name
113− -> Module.UserImport
115+ -> AlmostCanonicalModule
114− -> Maybe (A.Located Warning.Warning)
116+ -> R.Result Warning.Warning e Module.CanonicalModule
117+filterImports uses modul@(Module.Module _ _ _ (defaults, imports) _) =
118+ do reducedImports <-
119+ Maybe.catMaybes <$> T.traverse checkImport imports
123+ Set.toList (Set.fromList (map fst defaults ++ reducedImports))
115−warnUnusedImport uses (A.A region (name, _method)) =
126+ checkImport (A.A region (name, _method)) =
116− if Set.member name uses
127+ if Set.member name uses
117− then Nothing
128+ then
118− else Just (A.A region (Warning.UnusedImport name))
131+ do R.warn region (Warning.UnusedImport name)
121resolveExports
135resolveExports