@@ -22,7 +22,7 @@ import AST.PrettyPrint (pretty, commaSep)
22import qualified AST.Pattern as P
22import qualified AST.Pattern as P
23import Text.PrettyPrint as P
23import Text.PrettyPrint as P
25−import Transform.Canonicalize.Environment as Env
25+import qualified Transform.Canonicalize.Environment as Env
26import qualified Transform.Canonicalize.Setup as Setup
26import qualified Transform.Canonicalize.Setup as Setup
27import qualified Transform.Canonicalize.Type as Canonicalize
27import qualified Transform.Canonicalize.Type as Canonicalize
28import qualified Transform.Canonicalize.Variable as Canonicalize
28import qualified Transform.Canonicalize.Variable as Canonicalize
@@ -30,7 +30,10 @@ import qualified Transform.SortDefinitions as Transform
30import qualified Transform.Declaration as Transform
30import qualified Transform.Declaration as Transform
35+ -> Module.ValidModule
33−module' :: Module.Interfaces -> Module.ValidModule -> Either [Doc] Module.CanonicalModule
36+ -> Either [Doc] Module.CanonicalModule
34module' interfaces modul =
37module' interfaces modul =
35 filterImports <$> modul'
38 filterImports <$> modul'
@@ -39,11 +42,14 @@ module' interfaces modul =
40 filterImports m =
43 filterImports m =
41 let used (name,_) = Set.member name usedModules
44 let used (name,_) = Set.member name usedModules
42− in m { Module.imports = filter used (Module.imports m) }
46+ m { Module.imports = filter used (Module.imports m) }
45−moduleHelp :: Module.Interfaces -> Module.ValidModule
51+ -> Module.ValidModule
46− -> Canonicalizer [Doc] Module.CanonicalModule
52+ -> Env.Canonicalizer [Doc] Module.CanonicalModule
47moduleHelp interfaces modul@(Module.Module _ _ exports _ decls) =
53moduleHelp interfaces modul@(Module.Module _ _ exports _ decls) =
48 do env <- Setup.environment interfaces modul
54 do env <- Setup.environment interfaces modul
49 canonicalDecls <- mapM (declaration env) decls
55 canonicalDecls <- mapM (declaration env) decls
@@ -74,7 +80,10 @@ moduleHelp interfaces modul@(Module.Module _ _ exports _ decls) =
85+ -> Var.Listing Var.Value
77−resolveExports :: [Var.Value] -> Var.Listing Var.Value -> Canonicalizer [Doc] [Var.Value]
86+ -> Env.Canonicalizer [Doc] [Var.Value]
78resolveExports fullList (Var.Listing partialList open) =
87resolveExports fullList (Var.Listing partialList open) =
80 then return fullList
89 then return fullList
@@ -164,7 +173,10 @@ declToValue decl =
167−declaration :: Environment -> D.ValidDecl -> Canonicalizer [Doc] D.CanonicalDecl
179+ -> Env.Canonicalizer [Doc] D.CanonicalDecl
168declaration env decl =
180declaration env decl =
169 let canonicalize kind context pattern env v =
181 let canonicalize kind context pattern env v =
170 let ctx = P.text ("Error in " ++ context) <+> pretty pattern <> P.colon
182 let ctx = P.text ("Error in " ++ context) <+> pretty pattern <> P.colon
@@ -206,7 +218,10 @@ declaration env decl =
206 return $ D.Fixity assoc prec op
218 return $ D.Fixity assoc prec op
209−expression :: Environment -> Valid.Expr -> Canonicalizer [Doc] Canonical.Expr
224+ -> Env.Canonicalizer [Doc] Canonical.Expr
210expression env (A.A ann expr) =
225expression env (A.A ann expr) =
211 let go = expression env
226 let go = expression env
212 tipe' environ = format . Canonicalize.tipe environ
227 tipe' environ = format . Canonicalize.tipe environ
@@ -245,8 +260,9 @@ expression env (A.A ann expr) =
245 Binop op' <$> go e1 <*> go e2
260 Binop op' <$> go e1 <*> go e2
247 Lambda p e ->
262 Lambda p e ->
248− let env' = update p env in
263+ let env' = Env.addPattern p env
249− Lambda <$> format (pattern env' p) <*> expression env' e
265+ Lambda <$> format (pattern env' p) <*> expression env' e
251 App e1 e2 ->
267 App e1 e2 ->
252 App <$> go e1 <*> go e2
268 App <$> go e1 <*> go e2
@@ -259,7 +275,7 @@ expression env (A.A ann expr) =
259 Let defs e ->
275 Let defs e ->
260 Let <$> mapM rename' defs <*> expression env' e
276 Let <$> mapM rename' defs <*> expression env' e
262− env' = foldr update env $ map (\(Valid.Definition p _ _) -> p) defs
278+ env' = foldr Env.addPattern env $ map (\(Valid.Definition p _ _) -> p) defs
263 rename' (Valid.Definition p body mtipe) =
279 rename' (Valid.Definition p body mtipe) =
264 Canonical.Definition
280 Canonical.Definition
265 <$> format (pattern env' p)
281 <$> format (pattern env' p)
@@ -280,7 +296,7 @@ expression env (A.A ann expr) =
281 branch (p,b) =
297 branch (p,b) =
282 (,) <$> format (pattern env p)
298 (,) <$> format (pattern env p)
283− <*> expression (update p env) b
299+ <*> expression (Env.addPattern p env) b
285 PortIn name st ->
301 PortIn name st ->
286 PortIn name <$> tipe' env st
302 PortIn name <$> tipe' env st
@@ -292,7 +308,10 @@ expression env (A.A ann expr) =
292 return (GLShader uid src tipe)
308 return (GLShader uid src tipe)
295−pattern :: Environment -> P.RawPattern -> Canonicalizer String P.CanonicalPattern
314+ -> Env.Canonicalizer String P.CanonicalPattern
296pattern env ptrn =
315pattern env ptrn =
297 case ptrn of
316 case ptrn of
298 P.Var x -> return $ P.Var x
317 P.Var x -> return $ P.Var x