@@ -23,7 +23,9 @@ import AST.PrettyPrint (pretty, eightyCharLines)
2323import qualified AST.Pattern as P
2424import Text.PrettyPrint as P
2525
26−import Transform.Canonicalize.Environment as Env
26+import Transform.Canonicalize.Environment
27+ ( Canonicalizer, Environment(Env, _home, _values, _adts, _aliases, _patterns) )
28+import qualified Transform.Canonicalize.Environment as Env
2729import qualified Transform.Canonicalize.Type as Canonicalize
2830import qualified Transform.Interface as Interface
2931
@@ -38,7 +40,7 @@ environment interfaces modul@(Module.Module _ _ _ imports decls) =
3840 Module.names modul
3941
4042 nonLocalEnv <-
41− foldM (addImports moduleName interfaces) (builtIns moduleName) imports
43+ foldM (addImports moduleName interfaces) (Env.builtIns moduleName) imports
4244
4345 let (aliases, env) =
4446 List.foldl' (addDecl moduleName) ([], nonLocalEnv) decls
@@ -94,14 +96,16 @@ addImports moduleName interfaces environ (name, method)
9496 Interface.filterExports ((Map.!) interfaces name)
9597
9698 updateEnviron prefix env =
97− let dict' = dict . map (first (prefix++)) in
98− merge env $
99− Env { _home = moduleName
100− , _values = dict' $ map pair (Map.keys (iTypes interface)) ++ ctors
101− , _adts = dict' $ map pair (Map.keys (iAdts interface))
102− , _aliases = dict' $ map alias (Map.toList (iAliases interface))
103− , _patterns = dict' $ ctors
104− }
99+ let dict' pairs = Env.dict (map (first (prefix++)) pairs)
100+ in
101+ Env.merge env $
102+ Env
103+ { _home = moduleName
104+ , _values = dict' $ map pair (Map.keys (iTypes interface)) ++ ctors
105+ , _adts = dict' $ map pair (Map.keys (iAdts interface))
106+ , _aliases = dict' $ map alias (Map.toList (iAliases interface))
107+ , _patterns = dict' $ ctors
108+ }
105109
106110 canonical :: String -> Var.Canonical
107111 canonical =
@@ -128,7 +132,7 @@ addValue
128132 -> Canonicalizer [Doc] Environment
129133addValue moduleName interface env value =
130134 let name = Module.nameToString moduleName
131− insert' x = insert x (Var.Canonical (Var.Module moduleName) x)
135+ insert' x = Env.insert x (Var.Canonical (Var.Module moduleName) x)
132136 msg x = "Import Error: Could not import value '" ++ name ++ "." ++ x ++
133137 "'.\n It is not exported by module " ++ name ++ "."
134138 notFound x = throwError [ P.text (msg x) ]
@@ -145,7 +149,7 @@ addValue moduleName interface env value =
145149 case Map.lookup x (iAliases interface) of
146150 Just (tvars, t) ->
147151 return $ env
148− { _aliases = insert x v (_aliases env)
152+ { _aliases = Env.insert x v (_aliases env)
149153 , _values = updatedValues
150154 }
151155 where
@@ -231,7 +235,7 @@ addTypeAlias moduleName env scc =
231235 [(name, tvars, alias)] ->
232236 do alias' <- Env.onError throw (Canonicalize.tipe env alias)
233237 let value = (Var.Canonical (Var.Module moduleName) name, tvars, alias')
234− return $ env { _aliases = insert name value (_aliases env) }
238+ return $ env { _aliases = Env.insert name value (_aliases env) }
235239 where
236240 throw err =
237241 let msg = "Problem with type alias '" ++ name ++ "':"
@@ -294,8 +298,8 @@ addDecl
294298 -> ([Node], Environment)
295299addDecl moduleName info@(nodes,env) decl =
296300 let namespacedVar = Var.Canonical (Var.Module moduleName)
297− addLocal x e = insert x (Var.local x) e
298− addNamespaced x e = insert x (namespacedVar x) e
301+ addLocal x e = Env.insert x (Var.local x) e
302+ addNamespaced x e = Env.insert x (namespacedVar x) e
299303 in
300304 case decl of
301305 D.Definition (Valid.Definition pattern _ _) ->