on master help sign in
cosmetic: use module prefixes for variable canonicalization
4a5093fEvan Czaplicki
compiler/Transform/Canonicalize.hs+18−16
@@ -24,8 +24,8 @@ import qualified AST.Pattern as P
24import Text.PrettyPrint as P
24import Text.PrettyPrint as P
25
25
26import Transform.Canonicalize.Environment as Env
26import Transform.Canonicalize.Environment as Env
27−import Transform.Canonicalize.Type
27+import qualified Transform.Canonicalize.Type as Canonicalize
28−import Transform.Canonicalize.Variable (variable, pvar)
28+import qualified Transform.Canonicalize.Variable as Canonicalize
29import qualified Transform.SortDefinitions as Transform
29import qualified Transform.SortDefinitions as Transform
30import qualified Transform.Declaration as Transform
30import qualified Transform.Declaration as Transform
31
31
@@ -136,7 +136,7 @@ addDecl moduleName env decl =
136 addCtors how e = foldr how e (map fst ctors)
136 addCtors how e = foldr how e (map fst ctors)
137
137
138 D.TypeAlias name tvars alias ->
138 D.TypeAlias name tvars alias ->
139− do alias' <- Either.either throw return (tipe env alias)
139+ do alias' <- Either.either throw return (Canonicalize.tipe env alias)
140 return $ env
140 return $ env
141 { _aliases = insert name (namespacedVar name, tvars, alias') (_aliases env)
141 { _aliases = insert name (namespacedVar name, tvars, alias') (_aliases env)
142 , _values = case alias of
142 , _values = case alias of
@@ -259,24 +259,27 @@ declaration env decl =
259 D.Definition (Valid.Definition p e t) ->
259 D.Definition (Valid.Definition p e t) ->
260 do p' <- canonicalize pattern "definition" p env p
260 do p' <- canonicalize pattern "definition" p env p
261 e' <- expression env e
261 e' <- expression env e
262− t' <- T.traverse (canonicalize tipe "definition" p env) t
262+ t' <- T.traverse (canonicalize Canonicalize.tipe "definition" p env) t
263 return $ D.Definition (Canonical.Definition p' e' t')
263 return $ D.Definition (Canonical.Definition p' e' t')
264
264
265 D.Datatype name tvars ctors ->
265 D.Datatype name tvars ctors ->
266 D.Datatype name tvars <$> mapM canonicalize' ctors
266 D.Datatype name tvars <$> mapM canonicalize' ctors
267 where
267 where
268 canonicalize' (ctor,args) =
268 canonicalize' (ctor,args) =
269− (,) ctor <$> mapM (canonicalize tipe "datatype" name env) args
269+ (,) ctor <$> mapM (canonicalize Canonicalize.tipe "datatype" name env) args
270
270
271 D.TypeAlias name tvars expanded ->
271 D.TypeAlias name tvars expanded ->
272− D.TypeAlias name tvars <$> canonicalize tipe "type alias" name env expanded
272+ do expanded' <- canonicalize Canonicalize.tipe "type alias" name env expanded
273+ return (D.TypeAlias name tvars expanded')
273
274
274 D.Port port ->
275 D.Port port ->
275 D.Port <$> case port of
276 D.Port <$> case port of
277+ D.In name t ->
276− D.In name t -> D.In name <$> canonicalize tipe "port" name env t
278+ do t' <- canonicalize Canonicalize.tipe "port" name env t
279+ return (D.In name t')
277 D.Out name e t ->
280 D.Out name e t ->
278 do e' <- expression env e
281 do e' <- expression env e
279− t' <- canonicalize tipe "port" name env t
282+ t' <- canonicalize Canonicalize.tipe "port" name env t
280 return (D.Out name e' t')
283 return (D.Out name e' t')
281
284
282 D.Fixity assoc prec op -> return $ D.Fixity assoc prec op
285 D.Fixity assoc prec op -> return $ D.Fixity assoc prec op
@@ -303,11 +306,10 @@ allImportsAvailable interfaces imports =
303expression :: Environment -> Valid.Expr -> Either [Doc] Canonical.Expr
306expression :: Environment -> Valid.Expr -> Either [Doc] Canonical.Expr
304expression env (A.A ann expr) =
307expression env (A.A ann expr) =
305 let go = expression env
308 let go = expression env
306− tipe' environ = format . tipe environ
309+ tipe' environ = format . Canonicalize.tipe environ
310+ throw err =
307− throw err = Left [ P.vcat [ P.text "Error" <+> pretty ann <> P.colon
311+ let msg = P.text "Error" <+> pretty ann <> P.colon
308− , P.text err
312+ in Left [ P.vcat [ msg, P.text err ] ]
309− ]
310− ]
311 format = Either.either throw return
313 format = Either.either throw return
312 in
314 in
313 A.A ann <$>
315 A.A ann <$>
@@ -328,7 +330,7 @@ expression env (A.A ann expr) =
328 Record fs -> Record <$> mapM (\(k,v) -> (,) k <$> go v) fs
330 Record fs -> Record <$> mapM (\(k,v) -> (,) k <$> go v) fs
329
331
330 Binop (Var.Raw op) e1 e2 ->
332 Binop (Var.Raw op) e1 e2 ->
331− do op' <- format (variable env op)
333+ do op' <- format (Canonicalize.variable env op)
332 Binop op' <$> go e1 <*> go e2
334 Binop op' <$> go e1 <*> go e2
333
335
334 Lambda p e ->
336 Lambda p e ->
@@ -349,7 +351,7 @@ expression env (A.A ann expr) =
349 <*> expression env' body
351 <*> expression env' body
350 <*> T.traverse (tipe' env') mtipe
352 <*> T.traverse (tipe' env') mtipe
351
353
352− Var (Var.Raw x) -> Var <$> format (variable env x)
354+ Var (Var.Raw x) -> Var <$> format (Canonicalize.variable env x)
353
355
354 Data name es -> Data name <$> mapM go es
356 Data name es -> Data name <$> mapM go es
355
357
@@ -377,5 +379,5 @@ pattern env ptrn =
377 P.Anything -> return P.Anything
379 P.Anything -> return P.Anything
378 P.Alias x p -> P.Alias x <$> pattern env p
380 P.Alias x p -> P.Alias x <$> pattern env p
379 P.Data (Var.Raw name) ps ->
381 P.Data (Var.Raw name) ps ->
380− P.Data <$> pvar env name
382+ P.Data <$> Canonicalize.pvar env name
381 <*> mapM (pattern env) ps
383 <*> mapM (pattern env) ps
compiler/Transform/Canonicalize/Type.hs+2−2
@@ -11,7 +11,7 @@ import qualified AST.Type as T
11import qualified AST.Variable as Var
11import qualified AST.Variable as Var
12
12
13import Transform.Canonicalize.Environment
13import Transform.Canonicalize.Environment
14−import Transform.Canonicalize.Variable (tvar)
14+import qualified Transform.Canonicalize.Variable as Canonicalize
15
15
16tipe :: Environment -> T.RawType -> Either String T.CanonicalType
16tipe :: Environment -> T.RawType -> Either String T.CanonicalType
17tipe env typ =
17tipe env typ =
@@ -33,7 +33,7 @@ canonicalizeApp :: Environment -> T.RawType -> [T.RawType]
33canonicalizeApp env f args =
33canonicalizeApp env f args =
34 case f of
34 case f of
35 T.Type (Var.Raw rawName) ->
35 T.Type (Var.Raw rawName) ->
36− do answer <- tvar env rawName
36+ do answer <- Canonicalize.tvar env rawName
37 case answer of
37 case answer of
38 Right alias -> canonicalizeAlias env alias args
38 Right alias -> canonicalizeAlias env alias args
39 Left name -> case args of
39 Left name -> case args of