@@ -350,7 +350,38 @@ pprintErr' i (WithFnType ty) =
350350 text "Can't match on a function: type is" <+> annTm ty (pprintTerm i (delabSugared i ty))
351351pprintErr' i (CantMatch t) =
352352 text "Can't match on" <+> annTm t (pprintTerm i (delabSugared i t))
353−pprintErr' i (IncompleteTerm t) = text "Incomplete term" <+> annTm t (pprintTerm i (delabSugared i t))
353+pprintErr' i (IncompleteTerm t)
354+ = align (cat (punctuate (comma <> space)
355+ (map pprintIncomplete (nub $ getMissing [] [] t))))
356+ where
357+ pprintIncomplete (fn, arg)
358+ = text "Can't infer argument" <+> annName arg <+> text "to" <+>
359+ annName fn
360+
361+ getMissing :: [Name] -> [Name] -> Term -> [(Name, Name)]
362+ getMissing hs env (Bind n (Hole ty) sc)
363+ = getMissing (n : hs) (n : env) sc
364+ getMissing hs env (Bind n (Guess _ _) sc)
365+ = getMissing (n : hs) (n : env) sc
366+ getMissing hs env (Bind n (Let t v) sc)
367+ = getMissing hs env t ++
368+ getMissing hs env v ++
369+ getMissing hs (n : env) sc
370+ getMissing hs env (Bind n b sc)
371+ = getMissing hs env (binderTy b) ++
372+ getMissing hs (n : env) sc
373+ getMissing hs env ap@(App _ _ _)
374+ | (P _ n _, args) <- unApply ap = getMissingArgs n args
375+ where
376+ getMissingArgs n [] = []
377+ getMissingArgs n (V i : as)
378+ | env!!i `elem` hs = (n, env!!i) : getMissingArgs n as
379+ getMissingArgs n (P _ a _ : as)
380+ | a `elem` hs = (n, a) : getMissingArgs n as
381+ getMissingArgs n (a : as) = getMissing hs env a ++ getMissingArgs n as
382+ getMissing hs env (App _ f a)
383+ = getMissing hs env f ++ getMissing hs env a
384+ getMissing hs env _ = []
354385pprintErr' i (NoEliminator s t)
355386 = text "No " <> text s <> text " for type " <+>
356387 annTm t (pprintTerm i (delabSugared i t)) <$>