on master help sign in
Update canonicalize for AST shuffle
commit8867611a379a341dde64bb40e01f2d31a18da819 authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 8 Nov 2017, 19:42 (9 years ago) parent9d6d260
8 files changed+71−73
src/Canonicalize/Effects.hs+14−14 src/Canonicalize/Environment/Foreign.hs+2−2 src/Canonicalize/Environment/Internals.hs+4−5 src/Canonicalize/Environment/Local.hs+20−20 src/Canonicalize/Expression.hs+4−4 src/Canonicalize/Module.hs+7−8 src/Canonicalize/Pattern.hs+4−5 src/Canonicalize/Type.hs+16−15
src/Canonicalize/Effects.hs+14−14
@@ -11,10 +11,10 @@ import qualified Data.Map as Map
1111import qualified Data.Set as Set
1212import Data.Text (Text)
1313
14−import qualified AST.Expression.Canonical as Can
15−import qualified AST.Expression.Valid as Valid
14+import qualified AST.Canonical as Can
15+import qualified AST.Valid as Valid
1616import qualified AST.Module.Name as ModuleName
17−import qualified AST.Type as Type
17+import qualified AST.Utils.Type as Type
1818import qualified Canonicalize.Environment as Env
1919import qualified Canonicalize.Type as Type
2020import qualified Elm.Name as N
@@ -80,7 +80,7 @@ canonicalizePort :: Env.Env -> Valid.Port -> Result (N.Name, Can.Port)
8080canonicalizePort env (Valid.Port (A.A region portName) tipe) =
8181 do ctipe <- Type.canonicalize env tipe
8282 case Type.deepDealias ctipe of
83− Type.Lambda outgoingType (Type.Type home name [Type.Var _])
83+ Can.TLambda outgoingType (Can.TType home name [Can.TVar _])
8484 | home == ModuleName.cmd && name == "Cmd" ->
8585 case checkPayload outgoingType of
8686 Left (badType, err) ->
@@ -89,7 +89,7 @@ canonicalizePort env (Valid.Port (A.A region portName) tipe) =
8989 Right () ->
9090 Result.ok (portName, Can.Outgoing ctipe)
9191
92− Type.Lambda (Type.Lambda incomingType (Type.Var msg1)) (Type.Type home name [Type.Var msg2])
92+ Can.TLambda (Can.TLambda incomingType (Can.TVar msg1)) (Can.TType home name [Can.TVar msg2])
9393 | home == ModuleName.sub && name == "Sub" && msg1 == msg2 ->
9494 case checkPayload incomingType of
9595 Left (badType, err) ->
@@ -133,13 +133,13 @@ verifyManager tagRegion decls name =
133133-- CHECK PAYLOAD TYPES
134134
135135
136−checkPayload :: Type.Canonical -> Either (Type.Canonical, Error.InvalidPayload) ()
136+checkPayload :: Can.Type -> Either (Can.Type, Error.InvalidPayload) ()
137137checkPayload tipe =
138138 case tipe of
139− Type.Aliased _ _ args aliasedType ->
139+ Can.TAlias _ _ args aliasedType ->
140140 checkPayload (Type.dealias args aliasedType)
141141
142− Type.Type home name args ->
142+ Can.TType home name args ->
143143 case args of
144144 []
145145 | isPrim home name -> Right ()
@@ -153,10 +153,10 @@ checkPayload tipe =
153153 _ ->
154154 Left (tipe, Error.UnsupportedType name)
155155
156− Type.Unit ->
156+ Can.TUnit ->
157157 Right ()
158158
159− Type.Tuple a b maybeC ->
159+ Can.TTuple a b maybeC ->
160160 do checkPayload a
161161 checkPayload b
162162 case maybeC of
@@ -166,16 +166,16 @@ checkPayload tipe =
166166 Just c ->
167167 checkPayload c
168168
169− Type.Var name ->
169+ Can.TVar name ->
170170 Left (tipe, Error.TypeVariable name)
171171
172− Type.Lambda _ _ ->
172+ Can.TLambda _ _ ->
173173 Left (tipe, Error.Function)
174174
175− Type.Record _ (Just _) ->
175+ Can.TRecord _ (Just _) ->
176176 Left (tipe, Error.ExtendedRecord)
177177
178− Type.Record fields Nothing ->
178+ Can.TRecord fields Nothing ->
179179 F.traverse_ checkPayload fields
180180
181181
src/Canonicalize/Environment/Foreign.hs+2−2
@@ -9,8 +9,8 @@ module Canonicalize.Environment.Foreign
99import qualified Data.Map.Strict as Map
1010import qualified Data.Set as Set
1111
12−import qualified AST.Expression.Canonical as Can
13−import qualified AST.Expression.Source as Src
12+import qualified AST.Canonical as Can
13+import qualified AST.Source as Src
1414import qualified AST.Module.Name as ModuleName
1515import qualified Canonicalize.Environment.Internals as Env
1616import qualified Data.Bag as Bag
src/Canonicalize/Environment/Internals.hs+4−5
@@ -22,10 +22,9 @@ import qualified Data.Map.Strict as Map
2222import qualified Data.Map.Merge.Strict as Map
2323import qualified Data.Set as Set
2424
25−import qualified AST.Binop as Binop
26−import qualified AST.Expression.Canonical as Can
25+import qualified AST.Utils.Binop as Binop
26+import qualified AST.Canonical as Can
2727import qualified AST.Module.Name as ModuleName
28−import qualified AST.Type as Type
2928import qualified Data.Bag as Bag
3029import qualified Data.OneOrMore as OneOrMore
3130import qualified Elm.Name as N
@@ -79,7 +78,7 @@ data UnqualifiedVarHome
7978
8079
8180data Type
82− = Alias Int ModuleName.Canonical [N.Name] Type.Canonical
81+ = Alias Int ModuleName.Canonical [N.Name] Can.Type
8382 | Union Int ModuleName.Canonical
8483
8584
@@ -88,7 +87,7 @@ data Pattern =
8887 { _p_home :: ModuleName.Canonical
8988 , _p_type :: N.Name
9089 , _p_vars :: [N.Name]
91− , _p_args :: [Type.Canonical]
90+ , _p_args :: [Can.Type]
9291 }
9392
9493
src/Canonicalize/Environment/Local.hs+20−20
@@ -13,9 +13,9 @@ import qualified Data.Graph as Graph
1313import qualified Data.Map.Strict as Map
1414import qualified Data.Map.Merge.Strict as Map
1515
16−import qualified AST.Expression.Canonical as Can
17−import qualified AST.Expression.Valid as Valid
18−import qualified AST.Type as Type
16+import qualified AST.Canonical as Can
17+import qualified AST.Source as Src
18+import qualified AST.Valid as Valid
1919import qualified Canonicalize.Environment.Dups as Dups
2020import qualified Canonicalize.Environment.Internals as Env
2121import qualified Canonicalize.Type as Type
@@ -180,7 +180,7 @@ collectUpperVars (Valid.Module _ _ _ _ _ _ unions aliases _ _) =
180180
181181 aliasToInfos (Valid.Alias (A.A region name) _ (A.A _ tipe)) =
182182 case tipe of
183− Type.RRecord _ Nothing ->
183+ Src.TRecord _ Nothing ->
184184 [ Dups.info name region Error.RecordCtor () ]
185185
186186 _ ->
@@ -242,7 +242,7 @@ data Alias =
242242 { _region :: R.Region
243243 , _name :: N.Name
244244 , _args :: [N.Name]
245− , _type :: Type.Raw
245+ , _type :: Src.Type
246246 }
247247
248248
@@ -290,30 +290,30 @@ toNode alias@(Alias _ name _ tipe) =
290290 ( alias, name, Bag.toList (getEdges tipe) )
291291
292292
293−getEdges :: Type.Raw -> Bag.Bag N.Name
293+getEdges :: Src.Type -> Bag.Bag N.Name
294294getEdges (A.A _ tipe) =
295295 case tipe of
296− Type.RLambda arg result ->
296+ Src.TLambda arg result ->
297297 Bag.append (getEdges arg) (getEdges result)
298298
299− Type.RVar _ ->
299+ Src.TVar _ ->
300300 Bag.empty
301301
302− Type.RType _ Nothing name args ->
302+ Src.TType _ Nothing name args ->
303303 foldr Bag.append (Bag.one name) (map getEdges args)
304304
305− Type.RType _ (Just _) _ args ->
305+ Src.TType _ (Just _) _ args ->
306306 foldr Bag.append Bag.empty (map getEdges args)
307307
308− Type.RRecord fields ext ->
308+ Src.TRecord fields ext ->
309309 foldr Bag.append
310310 (maybe Bag.empty getEdges ext)
311311 (map (getEdges . snd) fields)
312312
313− Type.RUnit ->
313+ Src.TUnit ->
314314 Bag.empty
315315
316− Type.RTuple a b cs ->
316+ Src.TTuple a b cs ->
317317 foldr Bag.append
318318 (getEdges a)
319319 (getEdges b : map getEdges cs)
@@ -371,23 +371,23 @@ checkAliasFreeVars (Valid.Alias (A.A aliasRegion name) args tipe) =
371371 (map toLoc (Map.toList (Map.difference freeVars boundVars)))
372372
373373
374−addFreeVars :: Type.Raw -> Map.Map N.Name R.Region -> Map.Map N.Name R.Region
374+addFreeVars :: Src.Type -> Map.Map N.Name R.Region -> Map.Map N.Name R.Region
375375addFreeVars (A.A region tipe) freeVars =
376376 case tipe of
377− Type.RLambda arg result ->
377+ Src.TLambda arg result ->
378378 addFreeVars arg (addFreeVars result freeVars)
379379
380− Type.RVar name ->
380+ Src.TVar name ->
381381 Map.insert name region freeVars
382382
383− Type.RType _ _ _ args ->
383+ Src.TType _ _ _ args ->
384384 foldr addFreeVars freeVars args
385385
386− Type.RRecord fields ext ->
386+ Src.TRecord fields ext ->
387387 foldr addFreeVars (maybe id addFreeVars ext freeVars) (map snd fields)
388388
389− Type.RUnit ->
389+ Src.TUnit ->
390390 freeVars
391391
392− Type.RTuple a b cs ->
392+ Src.TTuple a b cs ->
393393 foldr addFreeVars freeVars (a:b:cs)
src/Canonicalize/Expression.hs+4−4
@@ -10,10 +10,10 @@ import qualified Data.Graph as Graph
1010import qualified Data.Map.Strict as Map
1111import qualified Data.Set as Set
1212
13−import qualified AST.Binop as Binop
14−import qualified AST.Expression.Canonical as Can
15−import qualified AST.Expression.Source as Src
16−import qualified AST.Expression.Valid as Valid
13+import qualified AST.Utils.Binop as Binop
14+import qualified AST.Canonical as Can
15+import qualified AST.Source as Src
16+import qualified AST.Valid as Valid
1717import qualified Canonicalize.Environment as Env
1818import qualified Canonicalize.Environment.Dups as Dups
1919import qualified Canonicalize.Pattern as Pattern
src/Canonicalize/Module.hs+7−8
@@ -9,11 +9,10 @@ import qualified Data.Graph as Graph
99import qualified Data.Map as Map
1010import qualified Data.Set as Set
1111
12−import qualified AST.Expression.Canonical as Can
13−import qualified AST.Expression.Source as Src
14−import qualified AST.Expression.Valid as Valid
12+import qualified AST.Canonical as Can
13+import qualified AST.Source as Src
14+import qualified AST.Valid as Valid
1515import qualified AST.Module.Name as ModuleName
16−import qualified AST.Type as Type
1716import qualified Canonicalize.Effects as Effects
1817import qualified Canonicalize.Environment as Env
1918import qualified Canonicalize.Environment.Dups as Dups
@@ -99,10 +98,10 @@ canonicalizeAlias env (Valid.Alias (A.A _ name) args tipe) =
9998 return (name, Can.Alias (map A.drop args) ctipe (toRecordCtorInfo tipe))
10099
101100
102−toRecordCtorInfo :: Type.Raw -> Maybe [N.Name]
101+toRecordCtorInfo :: Src.Type -> Maybe [N.Name]
103102toRecordCtorInfo (A.A _ tipe) =
104103 case tipe of
105− Type.RRecord fields Nothing ->
104+ Src.TRecord fields Nothing ->
106105 Just (map (A.drop . fst) fields)
107106
108107 _ ->
@@ -183,8 +182,8 @@ toNode env (A.A region (Valid.Decl name@(A.A _ key) args body tipe)) =
183182
184183
185184data Decl
186− = Value R.Region (A.Located N.Name) Can.Expr (Maybe Type.Canonical)
187− | Function N.Name Can.Args Can.Expr (Maybe Type.Canonical)
185+ = Value R.Region (A.Located N.Name) Can.Expr (Maybe Can.Type)
186+ | Function N.Name Can.Args Can.Expr (Maybe Can.Type)
188187
189188
190189toCanDecl :: Decl -> Can.Decl
src/Canonicalize/Pattern.hs+4−5
@@ -11,10 +11,9 @@ module Canonicalize.Pattern
1111import Control.Monad (zipWithM)
1212import qualified Data.Map.Strict as Map
1313
14−import qualified AST.Expression.Canonical as Can
15−import qualified AST.Expression.Source as Src
16−import qualified AST.Expression.Valid as Valid
17−import qualified AST.Type as Type
14+import qualified AST.Canonical as Can
15+import qualified AST.Source as Src
16+import qualified AST.Valid as Valid
1817import qualified Canonicalize.Environment as Env
1918import qualified Canonicalize.Environment.Dups as Dups
2019import qualified Data.Bag as Bag
@@ -79,7 +78,7 @@ canonicalizeMatch env pattern =
7978
8079
8180data Binding
82− = Define R.Region Int (A.Located N.Name) [Src.Pattern] Valid.Expr (Maybe Type.Raw)
81+ = Define R.Region Int (A.Located N.Name) [Src.Pattern] Valid.Expr (Maybe Src.Type)
8382 | Destruct R.Region Int Can.Match Valid.Expr
8483
8584
src/Canonicalize/Type.hs+16−15
@@ -8,7 +8,8 @@ module Canonicalize.Type
88
99import qualified Data.Map as Map
1010
11−import qualified AST.Type as Type
11+import qualified AST.Canonical as Can
12+import qualified AST.Source as Src
1213import qualified Canonicalize.Environment.Dups as Dups
1314import qualified Canonicalize.Environment.Internals as Env
1415import qualified Elm.Name as N
@@ -31,40 +32,40 @@ type Result i a =
3132-- CANONICALIZE TYPES
3233
3334
34−canonicalize :: Env.Env -> Type.Raw -> Result () Type.Canonical
35+canonicalize :: Env.Env -> Src.Type -> Result () Can.Type
3536canonicalize env (A.A typeRegion tipe) =
3637 case tipe of
37− Type.RVar x ->
38− Result.ok (Type.Var x)
38+ Src.TVar x ->
39+ Result.ok (Can.TVar x)
3940
40− Type.RType region maybePrefix name args ->
41+ Src.TType region maybePrefix name args ->
4142 do info <- Env.findType region env maybePrefix name
4243 cargs <- traverse (canonicalize env) args
4344 case info of
4445 Env.Alias arity home argNames aliasedType ->
4546 checkArgs Error.AliasArgs arity typeRegion name args $
46− Type.Aliased home name (zip argNames cargs) (Type.Holey aliasedType)
47+ Can.TAlias home name (zip argNames cargs) (Can.Holey aliasedType)
4748
4849 Env.Union arity home ->
4950 checkArgs Error.UnionArgs arity typeRegion name args $
50− Type.Type home name cargs
51+ Can.TType home name cargs
5152
52− Type.RLambda a b ->
53− Type.Lambda
53+ Src.TLambda a b ->
54+ Can.TLambda
5455 <$> canonicalize env a
5556 <*> canonicalize env b
5657
57− Type.RRecord fields ext ->
58+ Src.TRecord fields ext ->
5859 do fieldDict <- Dups.checkFields fields
59− Type.Record
60+ Can.TRecord
6061 <$> Map.traverseWithKey (\_ t -> canonicalize env t) fieldDict
6162 <*> traverse (canonicalize env) ext
6263
63− Type.RUnit ->
64− Result.ok Type.Unit
64+ Src.TUnit ->
65+ Result.ok Can.TUnit
6566
66− Type.RTuple a b cs ->
67− Type.Tuple
67+ Src.TTuple a b cs ->
68+ Can.TTuple
6869 <$> canonicalize env a
6970 <*> canonicalize env b
7071 <*>