@@ -88,14 +88,20 @@ constrain env (A.A region expression) tipe =
8888 )
8989 return $ con /\ tipe === (argType ==> resType)
9090
91− E.App func arg ->
91+ E.App func arg@(A.A argRegion _) ->
9292 do argVar <- variable Flexible
93− resultVar <- variable Flexible
9493 argCon <- constrain env arg (varN argVar)
95− funcCon <- constrain env func (varN argVar ==> varN resultVar)
96− let appCon = tipe === varN resultVar
97− return $
98− ex [argVar,resultVar] (CAnd [ argCon, funcCon, appCon ])
94+
95+ argVar' <- variable Flexible
96+ resultVar <- variable Flexible
97+ funcCon <- constrain env func (varN argVar' ==> varN resultVar)
98+
99+ return $ ex [argVar,argVar',resultVar] $ CAnd $
100+ [ argCon
101+ , funcCon
102+ , CEqual (Error.Argument argRegion) region (varN argVar') (varN argVar)
103+ , tipe === varN resultVar
104+ ]
99105
100106 E.MultiIf branches ->
101107 constrainIf env region branches tipe