@@ -11,6 +11,7 @@ import qualified Data.Traversable as Trav
1111import qualified AST.Declaration as D
1212import qualified AST.Expression.Valid as Valid
1313import qualified AST.Module as Module
14+import qualified AST.Module.Name as ModuleName
1415import qualified AST.Pattern as P
1516import qualified AST.Type as Type
1617import qualified AST.Variable as Var
@@ -25,50 +26,57 @@ import qualified Canonicalize.Type as Canonicalize
2526
2627
2728environment
28− :: Module.Interfaces
29+ :: Map.Map ModuleName.Raw ModuleName.Canonical
30+ -> Module.Interfaces
2931 -> Module.ValidModule
3032 -> Result.ResultErr Env.Environment
31−environment interfaces modul@(Module.Module _ _ _ _ (defaults, imports) decls) =
32− let moduleName =
33− Module.names modul
33+environment importDict interfaces (Module.Module name _ _ _ (defaults, imports) decls) =
34+ let
35+ allImports =
36+ imports ++ map (A.A (error "default import not found")) defaults
3437
35− allImports =
36− imports ++ map (A.A (error "default import not found")) defaults
38+ importPatchesResult =
39+ concat <$> Trav.traverse (importPatches importDict interfaces) allImports
3740
38− importPatchesResult =
39− concat <$> Trav.traverse (importPatches interfaces) allImports
41+ (typeAliasNodes, declPatches) =
42+ declarationsToPatches name decls
4043
41− (typeAliasNodes, declPatches) =
42− declarationsToPatches moduleName decls
43−
44− patches =
45− (++) (Env.builtinPatches ++ declPatches) <$> importPatchesResult
44+ patches =
45+ (++) (Env.builtinPatches ++ declPatches) <$> importPatchesResult
4646 in
47− (Env.fromPatches moduleName <$> patches)
48− `Result.andThen` addTypeAliases moduleName typeAliasNodes
47+ (Env.fromPatches name <$> patches)
48+ `Result.andThen` addTypeAliases name typeAliasNodes
4949
5050
5151-- PATCHES FOR IMPORTS
5252
5353importPatches
54− :: Module.Interfaces
55− -> A.Located (Module.Name, Module.ImportMethod)
54+ :: Map.Map ModuleName.Raw ModuleName.Canonical
55+ -> Module.Interfaces
56+ -> A.Located (ModuleName.Raw, Module.ImportMethod)
5657 -> Result.ResultErr [Env.Patch]
57−importPatches allInterfaces (A.A region (importName, method)) =
58− case restrictToPublicApi <$> Map.lookup importName allInterfaces of
58+importPatches importDict allInterfaces (A.A region (rawImportName, method)) =
59+ let
60+ maybeInterface =
61+ do canonicalName <- Map.lookup rawImportName importDict
62+ interface <- Map.lookup canonicalName allInterfaces
63+ return (canonicalName, restrictToPublicApi interface)
64+ in
65+ case maybeInterface of
5966 Nothing ->
60− if Module.nameIsNative importName then
67+ if ModuleName.isNative rawImportName then
6168 Result.ok []
6269
6370 else
6471 allInterfaces
6572 |> Map.keys
66− |> Error.nearbyNames Module.nameToString importName
67− |> Error.moduleNotFound importName
73+ |> map ModuleName._module
74+ |> Error.nearbyNames ModuleName.toString rawImportName
75+ |> Error.moduleNotFound rawImportName
6876 |> A.A region
6977 |> Result.err
7078
71− Just interface ->
79+ Just (importName, interface) ->
7280 let (Module.ImportMethod maybeAlias listing) =
7381 method
7482
@@ -76,7 +84,7 @@ importPatches allInterfaces (A.A region (importName, method)) =
7684 listing
7785
7886 qualifier =
79− maybe (Module.nameToString importName) id maybeAlias
87+ maybe (ModuleName.toString rawImportName) id maybeAlias
8088
8189 qualifiedPatches =
8290 interfacePatches importName (qualifier ++ ".") interface
@@ -89,7 +97,7 @@ importPatches allInterfaces (A.A region (importName, method)) =
8997 (++) qualifiedPatches <$> unqualifiedPatches
9098
9199
92−interfacePatches :: Module.Name -> String -> Module.Interface -> [Env.Patch]
100+interfacePatches :: ModuleName.Canonical -> String -> Module.Interface -> [Env.Patch]
93101interfacePatches moduleName prefix interface =
94102 let genericPatch mkPatch name value =
95103 mkPatch (prefix ++ name) value
@@ -124,7 +132,7 @@ interfacePatches moduleName prefix interface =
124132
125133valueToPatches
126134 :: R.Region
127− -> Module.Name
135+ -> ModuleName.Canonical
128136 -> Module.Interface
129137 -> Var.Value
130138 -> Result.ResultErr [Env.Patch]
@@ -139,7 +147,7 @@ valueToPatches region moduleName interface value =
139147 Module.iExports interface
140148 |> getNames
141149 |> Error.nearbyNames id x
142− |> Error.valueNotFound moduleName x
150+ |> Error.valueNotFound (ModuleName._module moduleName) x
143151 |> A.A region
144152 |> Result.err
145153 in
@@ -232,7 +240,7 @@ node region name tvars alias =
232240
233241
234242addTypeAliases
235− :: Module.Name
243+ :: ModuleName.Canonical
236244 -> [Node]
237245 -> Env.Environment
238246 -> Result.ResultErr Env.Environment
@@ -244,7 +252,7 @@ addTypeAliases moduleName typeAliasNodes initialEnv =
244252
245253
246254addTypeAlias
247− :: Module.Name
255+ :: ModuleName.Canonical
248256 -> Graph.SCC (R.Region, String, [String], Type.Raw)
249257 -> Env.Environment
250258 -> Result.ResultErr Env.Environment
@@ -272,7 +280,7 @@ addTypeAlias moduleName scc env =
272280-- DECLARATIONS TO PATCHES
273281
274282declarationsToPatches
275− :: Module.Name
283+ :: ModuleName.Canonical
276284 -> [D.ValidDecl]
277285 -> ([Node], [Env.Patch])
278286declarationsToPatches moduleName decls =
@@ -288,7 +296,7 @@ declarationsToPatches moduleName decls =
288296-- _values that are defined as top-level declarations are (Var.TopLevel ...)
289297-- all other _values are local (Var.Local)
290298declToPatches
291− :: Module.Name
299+ :: ModuleName.Canonical
292300 -> D.ValidDecl
293301 -> (Maybe Node, [Env.Patch])
294302declToPatches moduleName (A.A (region,_) decl) =