@@ -254,28 +254,36 @@ constrainCase env region expr branches tipe =
255 exprCon <- constrain env expr (varN exprVar)
255 exprCon <- constrain env expr (varN exprVar)
257− (branchVars, regions, branchExprCons) <-
257+ (branchInfo, branchExprCons) <-
258− unzip3 <$> mapM (branch (varN exprVar)) branches
258+ unzip <$> mapM (branch (varN exprVar)) branches
261− zipWith3 branchEqual [1..] branchVars regions
264− ex (exprVar:branchVars)
261+ ex (exprVar : map fst branchInfo)
265− (CAnd (exprCon : branchExprCons ++ branchCons))
262+ (CAnd (exprCon : branchExprCons ++ branchCons 2 branchInfo))
267 branch patternType (pattern, branchExpr@(A.A branchRegion _)) =
264 branch patternType (pattern, branchExpr@(A.A branchRegion _)) =
268 do branchVar <- variable Flexible
265 do branchVar <- variable Flexible
269 fragment <- Pattern.constrain env pattern patternType
266 fragment <- Pattern.constrain env pattern patternType
270 branchCon <- constrain env branchExpr (varN branchVar)
267 branchCon <- constrain env branchExpr (varN branchVar)
273− , branchRegion
269+ ( (branchVar, branchRegion)
274 , CLet [Fragment.toScheme fragment] branchCon
270 , CLet [Fragment.toScheme fragment] branchCon
277− branchEqual n var branchRegion =
273+ branchCons n branchInfo =
278− CEqual (Error.CaseBranch n branchRegion) region tipe (varN var)
279+ [ CEqual Error.Case region tipe (varN var) ]
281+ (var,_) : (var',region') : rest ->
283+ hint = Error.CaseBranch n region'
284+ con = CEqual hint region (varN var) (varN var')
286+ con : branchCons (n+1) ((var', region') : rest)
281-- EXPAND PATTERNS
289-- EXPAND PATTERNS