@@ -198,8 +198,8 @@ constrainApp env region f args tipe =
198 do funcVar <- variable Flexible
198 do funcVar <- variable Flexible
199 funcCon <- constrain env f (varN funcVar)
199 funcCon <- constrain env f (varN funcVar)
201− (vars, argCons, numberOfArgsCons, argMatchCons, returnVar) <-
201+ (vars, argCons, numberOfArgsCons, argMatchCons, _, returnVar) <-
202− argConstraints env maybeName region funcVar 1 args
202+ argConstraints env maybeName region (length args) funcVar 1 args
204 let returnCon =
204 let returnCon =
205 CEqual (Error.Function maybeName) region (varN returnVar) tipe
205 CEqual (Error.Function maybeName) region (varN returnVar) tipe
@@ -220,25 +220,31 @@ argConstraints
220 :: Env.Environment
220 :: Env.Environment
221 -> Maybe V.Canonical
221 -> Maybe V.Canonical
222 -> R.Region
222 -> R.Region
223 -> Variable
224 -> Variable
225 -> [Canonical.Expr]
226 -> [Canonical.Expr]
226− -> IO ([Variable], [TypeConstraint], [TypeConstraint], [TypeConstraint], Variable)
227+ -> IO ([Variable], [TypeConstraint], [TypeConstraint], [TypeConstraint], Maybe R.Region, Variable)
227−argConstraints env name region overallVar index args =
228+argConstraints env name region totalArgs overallVar index args =
228 case args of
229 case args of
230− return ([], [], [], [], overallVar)
231+ return ([], [], [], [], Nothing, overallVar)
232 expr@(A.A subregion _) : rest ->
233 expr@(A.A subregion _) : rest ->
233 do argVar <- variable Flexible
234 do argVar <- variable Flexible
234 argCon <- constrain env expr (varN argVar)
235 argCon <- constrain env expr (varN argVar)
236 argIndexVar <- variable Flexible
236 argIndexVar <- variable Flexible
237 localReturnVar <- variable Flexible
237 localReturnVar <- variable Flexible
239+ (vars, argConRest, numberOfArgsRest, argMatchRest, restRegion, returnVar) <-
240+ argConstraints env name region totalArgs localReturnVar (index + 1) rest
243+ maybe subregion (R.merge subregion) restRegion
239 let numberOfArgsCon =
245 let numberOfArgsCon =
241− (Error.FunctionArity name index subregion)
247+ (Error.FunctionArity name (index - 1) totalArgs arityRegion)
243 (varN argIndexVar ==> varN localReturnVar)
249 (varN argIndexVar ==> varN localReturnVar)
244 (varN overallVar)
250 (varN overallVar)
@@ -250,14 +256,12 @@ argConstraints env name region overallVar index args =
250 (varN argIndexVar)
256 (varN argIndexVar)
251 (varN argVar)
257 (varN argVar)
253− (vars, argConRest, numberOfArgsRest, argMatchRest, returnVar) <-
254− argConstraints env name region localReturnVar (index + 1) rest
257 ( argVar : argIndexVar : localReturnVar : vars
260 ( argVar : argIndexVar : localReturnVar : vars
258 , argCon : argConRest
261 , argCon : argConRest
259 , numberOfArgsCon : numberOfArgsRest
262 , numberOfArgsCon : numberOfArgsRest
260 , argMatchCon : argMatchRest
263 , argMatchCon : argMatchRest
261 , returnVar
265 , returnVar