@@ -198,8 +198,8 @@ constrainApp env region f args tipe =
198198 do funcVar <- variable Flexible
199199 funcCon <- constrain env f (varN funcVar)
200200
201− (vars, argCons, numberOfArgsCons, argMatchCons, returnVar) <-
202− argConstraints env maybeName region funcVar 1 args
201+ (vars, argCons, numberOfArgsCons, argMatchCons, _, returnVar) <-
202+ argConstraints env maybeName region (length args) funcVar 1 args
203203
204204 let returnCon =
205205 CEqual (Error.Function maybeName) region (varN returnVar) tipe
@@ -220,25 +220,31 @@ argConstraints
220220 :: Env.Environment
221221 -> Maybe V.Canonical
222222 -> R.Region
223+ -> Int
223224 -> Variable
224225 -> Int
225226 -> [Canonical.Expr]
226− -> IO ([Variable], [TypeConstraint], [TypeConstraint], [TypeConstraint], Variable)
227−argConstraints env name region overallVar index args =
227+ -> IO ([Variable], [TypeConstraint], [TypeConstraint], [TypeConstraint], Maybe R.Region, Variable)
228+argConstraints env name region totalArgs overallVar index args =
228229 case args of
229230 [] ->
230− return ([], [], [], [], overallVar)
231+ return ([], [], [], [], Nothing, overallVar)
231232
232233 expr@(A.A subregion _) : rest ->
233234 do argVar <- variable Flexible
234235 argCon <- constrain env expr (varN argVar)
235−
236236 argIndexVar <- variable Flexible
237237 localReturnVar <- variable Flexible
238238
239+ (vars, argConRest, numberOfArgsRest, argMatchRest, restRegion, returnVar) <-
240+ argConstraints env name region totalArgs localReturnVar (index + 1) rest
241+
242+ let arityRegion =
243+ maybe subregion (R.merge subregion) restRegion
244+
239245 let numberOfArgsCon =
240246 CEqual
241− (Error.FunctionArity name index subregion)
247+ (Error.FunctionArity name (index - 1) totalArgs arityRegion)
242248 region
243249 (varN argIndexVar ==> varN localReturnVar)
244250 (varN overallVar)
@@ -250,14 +256,12 @@ argConstraints env name region overallVar index args =
250256 (varN argIndexVar)
251257 (varN argVar)
252258
253− (vars, argConRest, numberOfArgsRest, argMatchRest, returnVar) <-
254− argConstraints env name region localReturnVar (index + 1) rest
255−
256259 return
257260 ( argVar : argIndexVar : localReturnVar : vars
258261 , argCon : argConRest
259262 , numberOfArgsCon : numberOfArgsRest
260263 , argMatchCon : argMatchRest
264+ , Just arityRegion
261265 , returnVar
262266 )
263267