on master help sign in
Improve type errors for application

Fix #863

commit60a112a4c175d80a65f00870a874c04bbce98531 authorEvan Czaplicki <info@elm-lang.org> dateThu 7 May 2015, 11:03 (11 years ago) parent6035372
1 file changed+7−4
src/Type/Constrain/Expression.hs+7−4
src/Type/Constrain/Expression.hs+7−4
@@ -99,10 +99,13 @@ constrain env (A.A region expression) tipe =
9999 return $ con /\ tipe === (argType ==> resType)
100100
101101 E.App func arg ->
102− exists $ \t ->
103− do funcCon <- constrain env func (t ==> tipe)
104− argCon <- constrain env arg t
105− return (funcCon /\ argCon)
102+ do argVar <- variable Flexible
103+ resultVar <- variable Flexible
104+ argCon <- constrain env arg (varN argVar)
105+ funcCon <- constrain env func (varN argVar ==> varN resultVar)
106+ let appCon = tipe === varN resultVar
107+ return $
108+ ex [argVar,resultVar] (CAnd [ argCon, funcCon, appCon ])
106109
107110 E.MultiIf branches ->
108111 constrainIf env region branches tipe