@@ -24,8 +24,8 @@ import qualified AST.Pattern as P
24import Text.PrettyPrint as P
24import Text.PrettyPrint as P
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
@@ -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)
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')
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
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
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')
274 D.Port port ->
275 D.Port port ->
275 D.Port <$> case port of
276 D.Port <$> case port of
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')
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
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 ] ]
311 format = Either.either throw return
313 format = Either.either throw return
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
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
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
352− Var (Var.Raw x) -> Var <$> format (variable env x)
354+ Var (Var.Raw x) -> Var <$> format (Canonicalize.variable env x)
354 Data name es -> Data name <$> mapM go es
356 Data name es -> Data name <$> mapM go es
@@ -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