@@ -21,7 +21,6 @@ import qualified AST.Canonical as Can
2121import qualified AST.Source as Src
2222import qualified AST.Utils.Binop as Binop
2323import qualified AST.Utils.Type as Type
24−import qualified AST.Valid as Valid
2524import qualified Canonicalize.Environment as Env
2625import qualified Canonicalize.Environment.Dups as Dups
2726import qualified Canonicalize.Pattern as Pattern
@@ -31,7 +30,6 @@ import qualified Elm.ModuleName as ModuleName
3130import qualified Elm.Package as Pkg
3231import qualified Reporting.Annotation as A
3332import qualified Reporting.Error.Canonicalize as Error
34−import qualified Reporting.Region as R
3533import qualified Reporting.Result as Result
3634import qualified Reporting.Warning as W
3735
@@ -59,46 +57,46 @@ data Uses =
5957-- CANONICALIZE
6058
6159
62−canonicalize :: Env.Env -> Valid.Expr -> Result FreeLocals [W.Warning] Can.Expr
60+canonicalize :: Env.Env -> Src.Expr -> Result FreeLocals [W.Warning] Can.Expr
6361canonicalize env (A.At region expression) =
6462 A.At region <$>
6563 case expression of
66− Valid.Str string ->
64+ Src.Str string ->
6765 Result.ok (Can.Str string)
6866
69− Valid.Chr char ->
67+ Src.Chr char ->
7068 Result.ok (Can.Chr char)
7169
72− Valid.Int int ->
70+ Src.Int int ->
7371 Result.ok (Can.Int int)
7472
75− Valid.Float float ->
73+ Src.Float float ->
7674 Result.ok (Can.Float float)
7775
78− Valid.Var varType name ->
76+ Src.Var varType name ->
7977 case varType of
80− Src.Value -> findVar region env name
81− Src.Ctor -> toVarCtor name <$> Env.findCtor region env name
78+ Src.LowVar -> findVar region env name
79+ Src.CapVar -> toVarCtor name <$> Env.findCtor region env name
8280
83− Valid.VarQual varType prefix name ->
81+ Src.VarQual varType prefix name ->
8482 case varType of
85− Src.Value -> findVarQual region env prefix name
86− Src.Ctor -> toVarCtor name <$> Env.findCtorQual region env prefix name
83+ Src.LowVar -> findVarQual region env prefix name
84+ Src.CapVar -> toVarCtor name <$> Env.findCtorQual region env prefix name
8785
88− Valid.List exprs ->
86+ Src.List exprs ->
8987 Can.List <$> traverse (canonicalize env) exprs
9088
91− Valid.Op op ->
89+ Src.Op op ->
9290 do (Env.Binop _ home name annotation _ _) <- Env.findBinop region env op
9391 return (Can.VarOperator op home name annotation)
9492
95− Valid.Negate expr ->
93+ Src.Negate expr ->
9694 Can.Negate <$> canonicalize env expr
9795
98− Valid.Binops ops final ->
96+ Src.Binops ops final ->
9997 A.toValue <$> canonicalizeBinops region env ops final
10098
101− Valid.Lambda srcArgs body ->
99+ Src.Lambda srcArgs body ->
102100 delayedUsage $
103101 do (args, bindings) <-
104102 Pattern.verify Error.DPLambdaArgs $
@@ -112,33 +110,33 @@ canonicalize env (A.At region expression) =
112110
113111 return (Can.Lambda args cbody, freeLocals)
114112
115− Valid.Call func args ->
113+ Src.Call func args ->
116114 Can.Call
117115 <$> canonicalize env func
118116 <*> traverse (canonicalize env) args
119117
120− Valid.If branches finally ->
118+ Src.If branches finally ->
121119 Can.If
122120 <$> traverse (canonicalizeIfBranch env) branches
123121 <*> canonicalize env finally
124122
125− Valid.Let defs expr ->
123+ Src.Let defs expr ->
126124 A.toValue <$> canonicalizeLet region env defs expr
127125
128− Valid.Case expr branches ->
126+ Src.Case expr branches ->
129127 Can.Case
130128 <$> canonicalize env expr
131129 <*> traverse (canonicalizeCaseBranch env) branches
132130
133− Valid.Accessor field ->
131+ Src.Accessor field ->
134132 Result.ok $ Can.Accessor field
135133
136− Valid.Access record field ->
134+ Src.Access record field ->
137135 Can.Access
138136 <$> canonicalize env record
139137 <*> Result.ok field
140138
141− Valid.Update (A.At reg name) fields ->
139+ Src.Update (A.At reg name) fields ->
142140 let
143141 makeCanFields =
144142 Dups.checkFields' (\r t -> Can.FieldUpdate r <$> canonicalize env t) fields
@@ -147,28 +145,28 @@ canonicalize env (A.At region expression) =
147145 <$> (A.At reg <$> findVar reg env name)
148146 <*> (sequenceA =<< makeCanFields)
149147
150− Valid.Record fields ->
148+ Src.Record fields ->
151149 do fieldDict <- Dups.checkFields fields
152150 Can.Record <$> traverse (canonicalize env) fieldDict
153151
154− Valid.Unit ->
152+ Src.Unit ->
155153 Result.ok Can.Unit
156154
157− Valid.Tuple a b cs ->
155+ Src.Tuple a b cs ->
158156 Can.Tuple
159157 <$> canonicalize env a
160158 <*> canonicalize env b
161159 <*> canonicalizeTupleExtras region env cs
162160
163− Valid.Shader uid src tipe ->
164− Result.ok (Can.Shader uid src tipe)
161+ Src.Shader src tipe ->
162+ Result.ok (Can.Shader src tipe)
165163
166164
167165
168166-- CANONICALIZE TUPLE EXTRAS
169167
170168
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)
172170canonicalizeTupleExtras region env extras =
173171 case extras of
174172 [] ->
@@ -185,7 +183,7 @@ canonicalizeTupleExtras region env extras =
185183-- CANONICALIZE IF BRANCH
186184
187185
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)
189187canonicalizeIfBranch env (condition, branch) =
190188 (,)
191189 <$> canonicalize env condition
@@ -196,7 +194,7 @@ canonicalizeIfBranch env (condition, branch) =
196194-- CANONICALIZE CASE BRANCH
197195
198196
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
200198canonicalizeCaseBranch env (pattern, expr) =
201199 directUsage $
202200 do (cpattern, bindings) <-
@@ -214,7 +212,7 @@ canonicalizeCaseBranch env (pattern, expr) =
214212-- CANONICALIZE BINOPS
215213
216214
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
218216canonicalizeBinops overallRegion env ops final =
219217 let
220218 canonicalizeHelp (expr, A.At region op) =
@@ -235,7 +233,7 @@ data Step
235233 | Error Env.Binop Env.Binop
236234
237235
238−runBinopStepper :: R.Region -> Step -> Result FreeLocals w Can.Expr
236+runBinopStepper :: A.Region -> Step -> Result FreeLocals w Can.Expr
239237runBinopStepper overallRegion step =
240238 case step of
241239 Done expr ->
@@ -297,7 +295,7 @@ toBinop (Env.Binop op home name annotation _ _) left right =
297295-- CANONICALIZE LET
298296
299297
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
301299canonicalizeLet letRegion env defs body =
302300 directUsage $
303301 do bindings <-
@@ -316,17 +314,17 @@ canonicalizeLet letRegion env defs body =
316314-- ADD BINDINGS
317315
318316
319−addBindings :: Dups.Dict R.Region -> Valid.Def -> Dups.Dict R.Region
320−addBindings bindings def =
317+addBindings :: Dups.Dict A.Region -> A.Located Src.Def -> Dups.Dict A.Region
318+addBindings bindings (A.At _ def) =
321319 case def of
322− Valid.Define _ (A.At region name) _ _ _ ->
320+ Src.Define (A.At region name) _ _ _ ->
323321 Dups.insert name region region bindings
324322
325− Valid.Destruct _ pattern _ ->
323+ Src.Destruct pattern _ ->
326324 addBindingsHelp bindings pattern
327325
328326
329−addBindingsHelp :: Dups.Dict R.Region -> Src.Pattern -> Dups.Dict R.Region
327+addBindingsHelp :: Dups.Dict A.Region -> Src.Pattern -> Dups.Dict A.Region
330328addBindingsHelp bindings (A.At region pattern) =
331329 case pattern of
332330 Src.PAnything ->
@@ -388,10 +386,10 @@ data Binding
388386 | Destruct Can.Pattern Can.Expr
389387
390388
391−addDefNodes :: Env.Env -> [Node] -> Valid.Def -> Result FreeLocals [W.Warning] [Node]
392−addDefNodes env nodes def =
389+addDefNodes :: Env.Env -> [Node] -> A.Located Src.Def -> Result FreeLocals [W.Warning] [Node]
390+addDefNodes env nodes (A.At _ def) =
393391 case def of
394− Valid.Define _ aname@(A.At _ name) srcArgs body maybeType ->
392+ Src.Define aname@(A.At _ name) srcArgs body maybeType ->
395393 case maybeType of
396394 Nothing ->
397395 do (args, argBindings) <-
@@ -424,7 +422,7 @@ addDefNodes env nodes def =
424422 let node = ( Define cdef, name, Map.keys freeLocals )
425423 logLetLocals args freeLocals (node:nodes)
426424
427− Valid.Destruct _ pattern body ->
425+ Src.Destruct pattern body ->
428426 do (cpattern, _bindings) <-
429427 Pattern.verify Error.DPDestruct $
430428 Pattern.canonicalize env pattern
@@ -512,14 +510,14 @@ gatherTypedArgs env name srcArgs tipe index revTypedArgs =
512510 _ ->
513511 let (A.At start _, A.At end _) = (head srcArgs, last srcArgs) in
514512 Result.throw $
515− Error.AnnotationTooShort (R.merge start end) name index (length srcArgs)
513+ Error.AnnotationTooShort (A.mergeRegions start end) name index (length srcArgs)
516514
517515
518516
519517-- DETECT CYCLES
520518
521519
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
523521detectCycles letRegion sccs body =
524522 case sccs of
525523 [] ->
@@ -657,7 +655,7 @@ verifyBindings context bindings (Result.Result k) =
657655 )
658656
659657
660−addUnusedWarning :: W.Context -> [W.Warning] -> Name.Name -> R.Region -> [W.Warning]
658+addUnusedWarning :: W.Context -> [W.Warning] -> Name.Name -> A.Region -> [W.Warning]
661659addUnusedWarning context warnings name region =
662660 W.UnusedVariable region context name : warnings
663661
@@ -687,7 +685,7 @@ delayedUsage (Result.Result k) =
687685-- FIND VARIABLE
688686
689687
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_
691689findVar region (Env.Env localHome vs _ _ _ qvs _ _) name =
692690 case Map.lookup name vs of
693691 Just var ->
@@ -712,7 +710,7 @@ findVar region (Env.Env localHome vs _ _ _ qvs _ _) name =
712710 Result.throw (Error.NotFoundVar region Nothing name (toPossibleNames vs qvs))
713711
714712
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_
716714findVarQual region (Env.Env localHome vs _ _ _ qvs _ _) prefix name =
717715 case Map.lookup prefix qvs of
718716 Just qualified ->