@@ -88,18 +88,23 @@ constrain env (A.A region expression) tipe =
8888 )
8989 return $ con /\ tipe === (argType ==> resType)
9090
91− E.App func arg@(A.A argRegion _) ->
91+ E.App func@(A.A funcRegion _) arg@(A.A argRegion _) ->
9292 do argVar <- variable Flexible
9393 argCon <- constrain env arg (varN argVar)
9494
95+ funcVar <- variable Flexible
96+ funcCon <- constrain env func (varN funcVar)
97+
9598 argVar' <- variable Flexible
9699 resultVar <- variable Flexible
97− funcCon <- constrain env func (varN argVar' ==> varN resultVar)
98100
99101 return $ ex [argVar,argVar',resultVar] $ CAnd $
100102 [ argCon
101103 , funcCon
102− , CEqual (Error.Argument argRegion) region (varN argVar') (varN argVar)
104+ , CEqual (Error.ExtraArgument funcRegion) region
105+ (varN funcVar)
106+ (varN argVar' ==> varN resultVar)
107+ , CEqual (Error.BadArgument argRegion) region (varN argVar') (varN argVar)
103108 , tipe === varN resultVar
104109 ]
105110