@@ -21,7 +21,6 @@ import qualified AST.Canonical as Can
21import qualified AST.Source as Src
21import qualified AST.Source as Src
22import qualified AST.Utils.Binop as Binop
22import qualified AST.Utils.Binop as Binop
23import qualified AST.Utils.Type as Type
23import qualified AST.Utils.Type as Type
24−import qualified AST.Valid as Valid
25import qualified Canonicalize.Environment as Env
24import qualified Canonicalize.Environment as Env
26import qualified Canonicalize.Environment.Dups as Dups
25import qualified Canonicalize.Environment.Dups as Dups
27import qualified Canonicalize.Pattern as Pattern
26import qualified Canonicalize.Pattern as Pattern
@@ -31,7 +30,6 @@ import qualified Elm.ModuleName as ModuleName
31import qualified Elm.Package as Pkg
30import qualified Elm.Package as Pkg
32import qualified Reporting.Annotation as A
31import qualified Reporting.Annotation as A
33import qualified Reporting.Error.Canonicalize as Error
32import qualified Reporting.Error.Canonicalize as Error
34−import qualified Reporting.Region as R
35import qualified Reporting.Result as Result
33import qualified Reporting.Result as Result
36import qualified Reporting.Warning as W
34import qualified Reporting.Warning as W
@@ -59,46 +57,46 @@ data Uses =
59-- CANONICALIZE
57-- CANONICALIZE
62−canonicalize :: Env.Env -> Valid.Expr -> Result FreeLocals [W.Warning] Can.Expr
60+canonicalize :: Env.Env -> Src.Expr -> Result FreeLocals [W.Warning] Can.Expr
63canonicalize env (A.At region expression) =
61canonicalize env (A.At region expression) =
64 A.At region <$>
62 A.At region <$>
65 case expression of
63 case expression of
66− Valid.Str string ->
64+ Src.Str string ->
67 Result.ok (Can.Str string)
65 Result.ok (Can.Str string)
69− Valid.Chr char ->
67+ Src.Chr char ->
70 Result.ok (Can.Chr char)
68 Result.ok (Can.Chr char)
72− Valid.Int int ->
70+ Src.Int int ->
73 Result.ok (Can.Int int)
71 Result.ok (Can.Int int)
75− Valid.Float float ->
73+ Src.Float float ->
76 Result.ok (Can.Float float)
74 Result.ok (Can.Float float)
78− Valid.Var varType name ->
76+ Src.Var varType name ->
79 case varType of
77 case varType of
80− Src.Value -> findVar region env name
78+ Src.LowVar -> findVar region env name
81− Src.Ctor -> toVarCtor name <$> Env.findCtor region env name
79+ Src.CapVar -> toVarCtor name <$> Env.findCtor region env name
83− Valid.VarQual varType prefix name ->
81+ Src.VarQual varType prefix name ->
84 case varType of
82 case varType of
85− Src.Value -> findVarQual region env prefix name
83+ Src.LowVar -> findVarQual region env prefix name
86− Src.Ctor -> toVarCtor name <$> Env.findCtorQual region env prefix name
84+ Src.CapVar -> toVarCtor name <$> Env.findCtorQual region env prefix name
88− Valid.List exprs ->
86+ Src.List exprs ->
89 Can.List <$> traverse (canonicalize env) exprs
87 Can.List <$> traverse (canonicalize env) exprs
91− Valid.Op op ->
89+ Src.Op op ->
92 do (Env.Binop _ home name annotation _ _) <- Env.findBinop region env op
90 do (Env.Binop _ home name annotation _ _) <- Env.findBinop region env op
93 return (Can.VarOperator op home name annotation)
91 return (Can.VarOperator op home name annotation)
95− Valid.Negate expr ->
93+ Src.Negate expr ->
96 Can.Negate <$> canonicalize env expr
94 Can.Negate <$> canonicalize env expr
98− Valid.Binops ops final ->
96+ Src.Binops ops final ->
99 A.toValue <$> canonicalizeBinops region env ops final
97 A.toValue <$> canonicalizeBinops region env ops final
101− Valid.Lambda srcArgs body ->
99+ Src.Lambda srcArgs body ->
102 delayedUsage $
100 delayedUsage $
103 do (args, bindings) <-
101 do (args, bindings) <-
104 Pattern.verify Error.DPLambdaArgs $
102 Pattern.verify Error.DPLambdaArgs $
@@ -112,33 +110,33 @@ canonicalize env (A.At region expression) =
113 return (Can.Lambda args cbody, freeLocals)
111 return (Can.Lambda args cbody, freeLocals)
115− Valid.Call func args ->
113+ Src.Call func args ->
117 <$> canonicalize env func
115 <$> canonicalize env func
118 <*> traverse (canonicalize env) args
116 <*> traverse (canonicalize env) args
120− Valid.If branches finally ->
118+ Src.If branches finally ->
122 <$> traverse (canonicalizeIfBranch env) branches
120 <$> traverse (canonicalizeIfBranch env) branches
123 <*> canonicalize env finally
121 <*> canonicalize env finally
125− Valid.Let defs expr ->
123+ Src.Let defs expr ->
126 A.toValue <$> canonicalizeLet region env defs expr
124 A.toValue <$> canonicalizeLet region env defs expr
128− Valid.Case expr branches ->
126+ Src.Case expr branches ->
130 <$> canonicalize env expr
128 <$> canonicalize env expr
131 <*> traverse (canonicalizeCaseBranch env) branches
129 <*> traverse (canonicalizeCaseBranch env) branches
133− Valid.Accessor field ->
131+ Src.Accessor field ->
134 Result.ok $ Can.Accessor field
132 Result.ok $ Can.Accessor field
136− Valid.Access record field ->
134+ Src.Access record field ->
137 Can.Access
135 Can.Access
138 <$> canonicalize env record
136 <$> canonicalize env record
139 <*> Result.ok field
137 <*> Result.ok field
141− Valid.Update (A.At reg name) fields ->
139+ Src.Update (A.At reg name) fields ->
143 makeCanFields =
141 makeCanFields =
144 Dups.checkFields' (\r t -> Can.FieldUpdate r <$> canonicalize env t) fields
142 Dups.checkFields' (\r t -> Can.FieldUpdate r <$> canonicalize env t) fields
@@ -147,28 +145,28 @@ canonicalize env (A.At region expression) =
147 <$> (A.At reg <$> findVar reg env name)
145 <$> (A.At reg <$> findVar reg env name)
148 <*> (sequenceA =<< makeCanFields)
146 <*> (sequenceA =<< makeCanFields)
150− Valid.Record fields ->
148+ Src.Record fields ->
151 do fieldDict <- Dups.checkFields fields
149 do fieldDict <- Dups.checkFields fields
152 Can.Record <$> traverse (canonicalize env) fieldDict
150 Can.Record <$> traverse (canonicalize env) fieldDict
154− Valid.Unit ->
152+ Src.Unit ->
155 Result.ok Can.Unit
153 Result.ok Can.Unit
157− Valid.Tuple a b cs ->
155+ Src.Tuple a b cs ->
158 Can.Tuple
156 Can.Tuple
159 <$> canonicalize env a
157 <$> canonicalize env a
160 <*> canonicalize env b
158 <*> canonicalize env b
161 <*> canonicalizeTupleExtras region env cs
159 <*> canonicalizeTupleExtras region env cs
163− Valid.Shader uid src tipe ->
161+ Src.Shader src tipe ->
164− Result.ok (Can.Shader uid src tipe)
162+ Result.ok (Can.Shader src tipe)
168-- CANONICALIZE TUPLE EXTRAS
166-- CANONICALIZE TUPLE EXTRAS
171−canonicalizeTupleExtras :: R.Region -> Env.Env -> [Valid.Expr] -> Result FreeLocals [W.Warning] (Maybe Can.Expr)
169+canonicalizeTupleExtras :: A.Region -> Env.Env -> [Src.Expr] -> Result FreeLocals [W.Warning] (Maybe Can.Expr)
172canonicalizeTupleExtras region env extras =
170canonicalizeTupleExtras region env extras =
173 case extras of
171 case extras of
@@ -185,7 +183,7 @@ canonicalizeTupleExtras region env extras =
185-- CANONICALIZE IF BRANCH
183-- CANONICALIZE IF BRANCH
188−canonicalizeIfBranch :: Env.Env -> (Valid.Expr, Valid.Expr) -> Result FreeLocals [W.Warning] (Can.Expr, Can.Expr)
186+canonicalizeIfBranch :: Env.Env -> (Src.Expr, Src.Expr) -> Result FreeLocals [W.Warning] (Can.Expr, Can.Expr)
189canonicalizeIfBranch env (condition, branch) =
187canonicalizeIfBranch env (condition, branch) =
191 <$> canonicalize env condition
189 <$> canonicalize env condition
@@ -196,7 +194,7 @@ canonicalizeIfBranch env (condition, branch) =
196-- CANONICALIZE CASE BRANCH
194-- CANONICALIZE CASE BRANCH
199−canonicalizeCaseBranch :: Env.Env -> (Src.Pattern, Valid.Expr) -> Result FreeLocals [W.Warning] Can.CaseBranch
197+canonicalizeCaseBranch :: Env.Env -> (Src.Pattern, Src.Expr) -> Result FreeLocals [W.Warning] Can.CaseBranch
200canonicalizeCaseBranch env (pattern, expr) =
198canonicalizeCaseBranch env (pattern, expr) =
201 directUsage $
199 directUsage $
202 do (cpattern, bindings) <-
200 do (cpattern, bindings) <-
@@ -214,7 +212,7 @@ canonicalizeCaseBranch env (pattern, expr) =
214-- CANONICALIZE BINOPS
212-- CANONICALIZE BINOPS
217−canonicalizeBinops :: R.Region -> Env.Env -> [(Valid.Expr, A.Located Name.Name)] -> Valid.Expr -> Result FreeLocals [W.Warning] Can.Expr
215+canonicalizeBinops :: A.Region -> Env.Env -> [(Src.Expr, A.Located Name.Name)] -> Src.Expr -> Result FreeLocals [W.Warning] Can.Expr
218canonicalizeBinops overallRegion env ops final =
216canonicalizeBinops overallRegion env ops final =
220 canonicalizeHelp (expr, A.At region op) =
218 canonicalizeHelp (expr, A.At region op) =
@@ -235,7 +233,7 @@ data Step
235 | Error Env.Binop Env.Binop
233 | Error Env.Binop Env.Binop
238−runBinopStepper :: R.Region -> Step -> Result FreeLocals w Can.Expr
236+runBinopStepper :: A.Region -> Step -> Result FreeLocals w Can.Expr
239runBinopStepper overallRegion step =
237runBinopStepper overallRegion step =
240 case step of
238 case step of
241 Done expr ->
239 Done expr ->
@@ -297,7 +295,7 @@ toBinop (Env.Binop op home name annotation _ _) left right =
297-- CANONICALIZE LET
295-- CANONICALIZE LET
300−canonicalizeLet :: R.Region -> Env.Env -> [Valid.Def] -> Valid.Expr -> Result FreeLocals [W.Warning] Can.Expr
298+canonicalizeLet :: A.Region -> Env.Env -> [A.Located Src.Def] -> Src.Expr -> Result FreeLocals [W.Warning] Can.Expr
301canonicalizeLet letRegion env defs body =
299canonicalizeLet letRegion env defs body =
302 directUsage $
300 directUsage $
303 do bindings <-
301 do bindings <-
@@ -316,17 +314,17 @@ canonicalizeLet letRegion env defs body =
316-- ADD BINDINGS
314-- ADD BINDINGS
319−addBindings :: Dups.Dict R.Region -> Valid.Def -> Dups.Dict R.Region
317+addBindings :: Dups.Dict A.Region -> A.Located Src.Def -> Dups.Dict A.Region
320−addBindings bindings def =
318+addBindings bindings (A.At _ def) =
321 case def of
319 case def of
322− Valid.Define _ (A.At region name) _ _ _ ->
320+ Src.Define (A.At region name) _ _ _ ->
323 Dups.insert name region region bindings
321 Dups.insert name region region bindings
325− Valid.Destruct _ pattern _ ->
323+ Src.Destruct pattern _ ->
326 addBindingsHelp bindings pattern
324 addBindingsHelp bindings pattern
329−addBindingsHelp :: Dups.Dict R.Region -> Src.Pattern -> Dups.Dict R.Region
327+addBindingsHelp :: Dups.Dict A.Region -> Src.Pattern -> Dups.Dict A.Region
330addBindingsHelp bindings (A.At region pattern) =
328addBindingsHelp bindings (A.At region pattern) =
331 case pattern of
329 case pattern of
332 Src.PAnything ->
330 Src.PAnything ->
@@ -388,10 +386,10 @@ data Binding
388 | Destruct Can.Pattern Can.Expr
386 | Destruct Can.Pattern Can.Expr
391−addDefNodes :: Env.Env -> [Node] -> Valid.Def -> Result FreeLocals [W.Warning] [Node]
389+addDefNodes :: Env.Env -> [Node] -> A.Located Src.Def -> Result FreeLocals [W.Warning] [Node]
392−addDefNodes env nodes def =
390+addDefNodes env nodes (A.At _ def) =
393 case def of
391 case def of
394− Valid.Define _ aname@(A.At _ name) srcArgs body maybeType ->
392+ Src.Define aname@(A.At _ name) srcArgs body maybeType ->
395 case maybeType of
393 case maybeType of
396 Nothing ->
394 Nothing ->
397 do (args, argBindings) <-
395 do (args, argBindings) <-
@@ -424,7 +422,7 @@ addDefNodes env nodes def =
424 let node = ( Define cdef, name, Map.keys freeLocals )
422 let node = ( Define cdef, name, Map.keys freeLocals )
425 logLetLocals args freeLocals (node:nodes)
423 logLetLocals args freeLocals (node:nodes)
427− Valid.Destruct _ pattern body ->
425+ Src.Destruct pattern body ->
428 do (cpattern, _bindings) <-
426 do (cpattern, _bindings) <-
429 Pattern.verify Error.DPDestruct $
427 Pattern.verify Error.DPDestruct $
430 Pattern.canonicalize env pattern
428 Pattern.canonicalize env pattern
@@ -512,14 +510,14 @@ gatherTypedArgs env name srcArgs tipe index revTypedArgs =
513 let (A.At start _, A.At end _) = (head srcArgs, last srcArgs) in
511 let (A.At start _, A.At end _) = (head srcArgs, last srcArgs) in
514 Result.throw $
512 Result.throw $
515− Error.AnnotationTooShort (R.merge start end) name index (length srcArgs)
513+ Error.AnnotationTooShort (A.mergeRegions start end) name index (length srcArgs)
519-- DETECT CYCLES
517-- DETECT CYCLES
522−detectCycles :: R.Region -> [Graph.SCC Binding] -> Can.Expr -> Result i w Can.Expr
520+detectCycles :: A.Region -> [Graph.SCC Binding] -> Can.Expr -> Result i w Can.Expr
523detectCycles letRegion sccs body =
521detectCycles letRegion sccs body =
524 case sccs of
522 case sccs of
@@ -657,7 +655,7 @@ verifyBindings context bindings (Result.Result k) =
660−addUnusedWarning :: W.Context -> [W.Warning] -> Name.Name -> R.Region -> [W.Warning]
658+addUnusedWarning :: W.Context -> [W.Warning] -> Name.Name -> A.Region -> [W.Warning]
661addUnusedWarning context warnings name region =
659addUnusedWarning context warnings name region =
662 W.UnusedVariable region context name : warnings
660 W.UnusedVariable region context name : warnings
@@ -687,7 +685,7 @@ delayedUsage (Result.Result k) =
687-- FIND VARIABLE
685-- FIND VARIABLE
690−findVar :: R.Region -> Env.Env -> Name.Name -> Result FreeLocals w Can.Expr_
688+findVar :: A.Region -> Env.Env -> Name.Name -> Result FreeLocals w Can.Expr_
691findVar region (Env.Env localHome vs _ _ _ qvs _ _) name =
689findVar region (Env.Env localHome vs _ _ _ qvs _ _) name =
692 case Map.lookup name vs of
690 case Map.lookup name vs of
693 Just var ->
691 Just var ->
@@ -712,7 +710,7 @@ findVar region (Env.Env localHome vs _ _ _ qvs _ _) name =
712 Result.throw (Error.NotFoundVar region Nothing name (toPossibleNames vs qvs))
710 Result.throw (Error.NotFoundVar region Nothing name (toPossibleNames vs qvs))
715−findVarQual :: R.Region -> Env.Env -> Name.Name -> Name.Name -> Result FreeLocals w Can.Expr_
713+findVarQual :: A.Region -> Env.Env -> Name.Name -> Name.Name -> Result FreeLocals w Can.Expr_
716findVarQual region (Env.Env localHome vs _ _ _ qvs _ _) prefix name =
714findVarQual region (Env.Env localHome vs _ _ _ qvs _ _) prefix name =
717 case Map.lookup prefix qvs of
715 case Map.lookup prefix qvs of
718 Just qualified ->
716 Just qualified ->