@@ -137,10 +137,10 @@ collectLowerVars :: Valid.Module -> Result i (Map.Map N.Name ())
137collectLowerVars (Valid.Module _ _ _ _ _ decls _ _ _ effects) =
137collectLowerVars (Valid.Module _ _ _ _ _ decls _ _ _ effects) =
139 addDecl (A.At _ (Valid.Decl (A.At region name) _ _ _)) dict =
139 addDecl (A.At _ (Valid.Decl (A.At region name) _ _ _)) dict =
140− Dups.insert name region () () dict
140+ Dups.insert name region () dict
142 addPort (Valid.Port (A.At region name) _) dict =
142 addPort (Valid.Port (A.At region name) _) dict =
143− Dups.insert name region () () dict
143+ Dups.insert name region () dict
145 effectDict =
145 effectDict =
146 case effects of
146 case effects of
@@ -153,15 +153,15 @@ collectLowerVars (Valid.Module _ _ _ _ _ decls _ _ _ effects) =
153 Valid.Manager _ manager ->
153 Valid.Manager _ manager ->
154 case manager of
154 case manager of
155 Valid.Cmd (A.At region _) ->
155 Valid.Cmd (A.At region _) ->
156− Dups.one "command" region () ()
156+ Dups.one "command" region ()
158 Valid.Sub (A.At region _) ->
158 Valid.Sub (A.At region _) ->
159− Dups.one "subscription" region () ()
159+ Dups.one "subscription" region ()
161 Valid.Fx (A.At regionCmd _) (A.At regionSub _) ->
161 Valid.Fx (A.At regionCmd _) (A.At regionSub _) ->
162 Dups.union
162 Dups.union
163− (Dups.one "command" regionCmd () ())
163+ (Dups.one "command" regionCmd ())
164− (Dups.one "subscription" regionSub () ())
164+ (Dups.one "subscription" regionSub ())
166 Dups.detect Error.DuplicateDecl $ foldr addDecl effectDict decls
166 Dups.detect Error.DuplicateDecl $ foldr addDecl effectDict decls
@@ -169,16 +169,16 @@ collectLowerVars (Valid.Module _ _ _ _ _ decls _ _ _ effects) =
169collectUpperVars :: Valid.Module -> Result i (Map.Map N.Name ())
169collectUpperVars :: Valid.Module -> Result i (Map.Map N.Name ())
170collectUpperVars (Valid.Module _ _ _ _ _ _ unions aliases _ _) =
170collectUpperVars (Valid.Module _ _ _ _ _ _ unions aliases _ _) =
172− addUnion (Valid.Union (A.At _ name) _ ctors) dict =
172+ addUnion (Valid.Union _ _ ctors) dict =
173− foldr (addCtor name) dict ctors
173+ foldr addCtor dict ctors
175− addCtor tipe (A.At region name, _args) dict =
175+ addCtor (A.At region name, _args) dict =
176− Dups.insert name region (Error.UnionCtor tipe) () dict
176+ Dups.insert name region () dict
178 addAlias (Valid.Alias (A.At region name) _ (A.At _ tipe)) dict =
178 addAlias (Valid.Alias (A.At region name) _ (A.At _ tipe)) dict =
179 case tipe of
179 case tipe of
180 Src.TRecord _ Nothing ->
180 Src.TRecord _ Nothing ->
181− Dups.insert name region Error.RecordCtor () dict
181+ Dups.insert name region () dict
@@ -196,11 +196,11 @@ addTypes (Valid.Module _ _ _ _ _ _ unions aliases _ _) env =
197 aliasToDict alias@(Valid.Alias (A.At region name) _ tipe) =
197 aliasToDict alias@(Valid.Alias (A.At region name) _ tipe) =
198 do args <- checkAliasFreeVars alias
198 do args <- checkAliasFreeVars alias
199− return $ Dups.one name region () (Left (Alias region name args tipe))
199+ return $ Dups.one name region (Left (Alias region name args tipe))
201 unionToDict union@(Valid.Union (A.At region name) _ _) =
201 unionToDict union@(Valid.Union (A.At region name) _ _) =
202 do arity <- checkUnionFreeVars union
202 do arity <- checkUnionFreeVars union
203− return $ Dups.one name region () (Right arity)
203+ return $ Dups.one name region (Right arity)
205 combineDicts dicts1 dicts2 =
205 combineDicts dicts1 dicts2 =
206 Dups.union (Dups.unions dicts1) (Dups.unions dicts2)
206 Dups.union (Dups.unions dicts1) (Dups.unions dicts2)
@@ -323,15 +323,12 @@ checkUnionFreeVars :: Valid.Union -> Result i Int
323checkUnionFreeVars (Valid.Union (A.At unionRegion name) args ctors) =
323checkUnionFreeVars (Valid.Union (A.At unionRegion name) args ctors) =
325 addUnion (A.At region arg) dict =
325 addUnion (A.At region arg) dict =
326− Dups.insert arg region () region dict
326+ Dups.insert arg region region dict
329− Error.DuplicateUnionArg name (map A.toValue args)
331 addCtorFreeVars (_, tipes) freeVars =
328 addCtorFreeVars (_, tipes) freeVars =
332 foldr addFreeVars freeVars tipes
329 foldr addFreeVars freeVars tipes
334− do boundVars <- Dups.detect toError (foldr addUnion Dups.none args)
331+ do boundVars <- Dups.detect (Error.DuplicateUnionArg name) (foldr addUnion Dups.none args)
335 let freeVars = foldr addCtorFreeVars Map.empty ctors
332 let freeVars = foldr addCtorFreeVars Map.empty ctors
336 case Map.toList (Map.difference freeVars boundVars) of
333 case Map.toList (Map.difference freeVars boundVars) of
@@ -348,12 +345,9 @@ checkAliasFreeVars :: Valid.Alias -> Result i [N.Name]
348checkAliasFreeVars (Valid.Alias (A.At aliasRegion name) args tipe) =
345checkAliasFreeVars (Valid.Alias (A.At aliasRegion name) args tipe) =
350 addAlias (A.At region arg) dict =
347 addAlias (A.At region arg) dict =
351− Dups.insert arg region () region dict
348+ Dups.insert arg region region dict
354− Error.DuplicateAliasArg name (map A.toValue args)
356− do boundVars <- Dups.detect toError (foldr addAlias Dups.none args)
350+ do boundVars <- Dups.detect (Error.DuplicateAliasArg name) (foldr addAlias Dups.none args)
357 let freeVars = addFreeVars tipe Map.empty
351 let freeVars = addFreeVars tipe Map.empty
358 let overlap = Map.size (Map.intersection boundVars freeVars)
352 let overlap = Map.size (Map.intersection boundVars freeVars)
359 if Map.size boundVars == overlap && Map.size freeVars == overlap
353 if Map.size boundVars == overlap && Map.size freeVars == overlap