@@ -104,7 +104,7 @@ constrain env annotatedExpr@(A.A region expression) tipe =
104104 constrainCase env region expr branches tipe
105105
106106 C.Ctor name exprs ->
107− do vars <- Monad.forM exprs $ \_ -> mkVar Nothing
107+ do vars <- mapM (\_ -> mkFlexVar) exprs
108108 let pairs = zip exprs (map VarN vars)
109109 (ctipe, cs) <- Monad.foldM step (tipe, CTrue) (reverse pairs)
110110 return $ ex vars (cs /\ CInstance region (V.toText name) ctipe)
@@ -124,11 +124,11 @@ constrain env annotatedExpr@(A.A region expression) tipe =
124124
125125 C.Update expr fields ->
126126 exists $ \t ->
127− do oldVars <- mapM (\_ -> mkVar Nothing) fields
127+ do oldVars <- mapM (\_ -> mkFlexVar) fields
128128 let oldFields = Map.fromList (zip (map fst fields) (map VarN oldVars))
129129 cOld <- ex oldVars <$> constrain env expr (RecordN oldFields t)
130130
131− newVars <- mapM (\_ -> mkVar Nothing) fields
131+ newVars <- mapM (\_ -> mkFlexVar) fields
132132 let newFields = Map.fromList (zip (map fst fields) (map VarN newVars))
133133 let cNew = CEqual Error.Record region (RecordN newFields t) tipe
134134
@@ -137,7 +137,7 @@ constrain env annotatedExpr@(A.A region expression) tipe =
137137 return $ cOld /\ ex newVars (CAnd (cNew : cs))
138138
139139 C.Record fields ->
140− do vars <- Monad.forM fields (\_ -> mkVar Nothing)
140+ do vars <- mapM (\_ -> mkFlexVar) fields
141141 fieldCons <-
142142 Monad.zipWithM
143143 (constrain env)
@@ -174,7 +174,7 @@ constrainApp
174174 -> Type
175175 -> IO Constraint
176176constrainApp env region f args tipe =
177− do funcVar <- mkVar Nothing
177+ do funcVar <- mkFlexVar
178178 funcCon <- constrain env f (VarN funcVar)
179179
180180 (vars, argCons, numberOfArgsCons, argMatchCons, _, returnVar) <-
@@ -210,10 +210,10 @@ argConstraints env name region totalArgs overallVar index args =
210210 return ([], [], [], [], Nothing, overallVar)
211211
212212 expr@(A.A subregion _) : rest ->
213− do argVar <- mkVar Nothing
213+ do argVar <- mkFlexVar
214214 argCon <- constrain env expr (VarN argVar)
215− argIndexVar <- mkVar Nothing
216− localReturnVar <- mkVar Nothing
215+ argIndexVar <- mkFlexVar
216+ localReturnVar <- mkFlexVar
217217
218218 (vars, argConRest, numberOfArgsRest, argMatchRest, restRegion, returnVar) <-
219219 argConstraints env name region totalArgs localReturnVar (index + 1) rest
@@ -258,15 +258,15 @@ constrainBinop
258258 -> Type
259259 -> IO Constraint
260260constrainBinop env region op leftExpr@(A.A leftRegion _) rightExpr@(A.A rightRegion _) tipe =
261− do leftVar <- mkVar Nothing
262− rightVar <- mkVar Nothing
261+ do leftVar <- mkFlexVar
262+ rightVar <- mkFlexVar
263263
264264 leftCon <- constrain env leftExpr (VarN leftVar)
265265 rightCon <- constrain env rightExpr (VarN rightVar)
266266
267− leftVar' <- mkVar Nothing
268− rightVar' <- mkVar Nothing
269− answerVar <- mkVar Nothing
267+ leftVar' <- mkFlexVar
268+ rightVar' <- mkFlexVar
269+ answerVar <- mkFlexVar
270270
271271 let opType = VarN leftVar' ==> VarN rightVar' ==> VarN answerVar
272272
@@ -295,7 +295,7 @@ constrainList env region exprs tipe =
295295 return $ ex vars (CAnd (exprCons ++ cons))
296296 where
297297 elementConstraint expr@(A.A region' _) =
298− do var <- mkVar Nothing
298+ do var <- mkFlexVar
299299 con <- constrain env expr (VarN var)
300300 return ( (var, region'), con )
301301
@@ -328,17 +328,14 @@ constrainIf env region branches finally tipe =
328328
329329 return $ ex (condVars ++ vars) (CAnd (condCons ++ branchExprCons ++ cons))
330330 where
331− bool =
332− AppN V.bool []
333−
334331 constrainCondition condition@(A.A condRegion _) =
335− do condVar <- mkVar Nothing
332+ do condVar <- mkFlexVar
336333 condCon <- constrain env condition (VarN condVar)
337334 let boolCon = CEqual Error.IfCondition condRegion (VarN condVar) bool
338335 return (condVar, CAnd [ condCon, boolCon ])
339336
340337 constrainBranch expr@(A.A branchRegion _) =
341− do branchVar <- mkVar Nothing
338+ do branchVar <- mkFlexVar
342339 exprCon <- constrain env expr (VarN branchVar)
343340 return
344341 ( (branchVar, branchRegion)
@@ -374,7 +371,7 @@ constrainCase
374371 -> Type
375372 -> IO Constraint
376373constrainCase env region expr branches tipe =
377− do exprVar <- mkVar Nothing
374+ do exprVar <- mkFlexVar
378375 exprCon <- constrain env expr (VarN exprVar)
379376
380377 (branchInfo, branchExprCons) <-
@@ -385,7 +382,7 @@ constrainCase env region expr branches tipe =
385382 return $ ex (exprVar : vars) (CAnd (exprCon : branchExprCons ++ cons))
386383 where
387384 branch patternType (pattern, branchExpr@(A.A branchRegion _)) =
388− do branchVar <- mkVar Nothing
385+ do branchVar <- mkFlexVar
389386 scheme <- Pattern.infoToScheme <$> Pattern.constrain env pattern patternType
390387 branchCon <- constrain env branchExpr (VarN branchVar)
391388 return
@@ -422,7 +419,7 @@ pairCons region pairHint varToCon items =
422419 in
423420 case collectPairs 2 items of
424421 Nothing ->
425− do var <- mkVar Nothing
422+ do var <- mkFlexVar
426423 return ([var], [varToCon var])
427424
428425 Just (pairs, var) ->
@@ -519,7 +516,7 @@ constrainUnannotatedDef
519516 -> Info
520517 -> IO Info
521518constrainUnannotatedDef env patternRegion name expr info =
522− do v <- mkVar Nothing
519+ do v <- mkFlexVar
523520 let tipe = VarN v
524521 defCon <- constrain env expr tipe
525522 return $ info
@@ -592,7 +589,7 @@ constrainAnnDefHelp expr tipe (ArgInfo name defRegion env args vars) =
592589 (Pattern.Info headers argVars argCons) <-
593590 Pattern.joinInfos <$> mapM (uncurry (Pattern.constrain finalEnv)) finalArgs
594591
595− resultVar <- mkVar Nothing
592+ resultVar <- mkFlexVar
596593 let resultType = VarN resultVar
597594 defCon <- constrain finalEnv expr resultType
598595