@@ -76,7 +76,18 @@ newtype Mismatch =
7676
7777
7878mismatch :: Context -> Maybe Error.Reason -> Unify a
79−mismatch (Context orientation _ _ _ _) maybeReason =
79+mismatch (Context orientation var1 _ var2 _) maybeReason =
80+ do numArgs1 <- liftIO $ countArgs var1
81+ numArgs2 <- liftIO $ countArgs var2
82+ mismatchHelp orientation $
83+ if numArgs1 == numArgs2 then
84+ maybeReason
85+ else
86+ Just (Error.MissingArgs (abs (numArgs2 - numArgs1)))
87+
88+
89+mismatchHelp :: Orientation -> Maybe Error.Reason -> Unify a
90+mismatchHelp orientation maybeReason =
8091 throwError $ Mismatch $
8192 case orientation of
8293 ExpectedActual ->
@@ -443,6 +454,17 @@ collectAppsHelp args content =
443454 return Other
444455
445456
457+countArgs :: Variable -> IO Int
458+countArgs variable =
459+ do content <- getContent variable
460+ case content of
461+ Structure (Fun1 _ returnType) ->
462+ (+1) <$> countArgs returnType
463+
464+ _ ->
465+ return 0
466+
467+
446468getContent :: Variable -> IO Content
447469getContent variable =
448470 _content <$> UF.descriptor variable