@@ -88,18 +88,23 @@ constrain env (A.A region expression) tipe =
89 return $ con /\ tipe === (argType ==> resType)
89 return $ con /\ tipe === (argType ==> resType)
91− E.App func arg@(A.A argRegion _) ->
91+ E.App func@(A.A funcRegion _) arg@(A.A argRegion _) ->
92 do argVar <- variable Flexible
92 do argVar <- variable Flexible
93 argCon <- constrain env arg (varN argVar)
93 argCon <- constrain env arg (varN argVar)
95+ funcVar <- variable Flexible
96+ funcCon <- constrain env func (varN funcVar)
95 argVar' <- variable Flexible
98 argVar' <- variable Flexible
96 resultVar <- variable Flexible
99 resultVar <- variable Flexible
97− funcCon <- constrain env func (varN argVar' ==> varN resultVar)
99 return $ ex [argVar,argVar',resultVar] $ CAnd $
101 return $ ex [argVar,argVar',resultVar] $ CAnd $
101 , funcCon
103 , funcCon
104+ , CEqual (Error.ExtraArgument funcRegion) region
106+ (varN argVar' ==> varN resultVar)
102− , CEqual (Error.Argument argRegion) region (varN argVar') (varN argVar)
107+ , CEqual (Error.BadArgument argRegion) region (varN argVar') (varN argVar)
103 , tipe === varN resultVar
108 , tipe === varN resultVar