@@ -60,6 +60,7 @@ data Context
6060 | IfCondition
6161 | IfBranch Index.ZeroBased
6262 | CaseBranch Index.ZeroBased
63+ | CallArity MaybeName Int
6364 | CallArg MaybeName Index.ZeroBased
6465 | TooManyArgs MaybeName Int
6566 | RecordAccess N.Name
@@ -796,22 +797,48 @@ toExprReport source localizer exprRegion category tipe expected =
796797 )
797798 )
798799
800+ CallArity maybeFuncName numArgs ->
801+ case countArgs tipe of
802+ 0 ->
803+ Report.toCodeSnippet source region (Just exprRegion)
804+ ( H.reflow $
805+ case maybeFuncName of
806+ NoName -> "This is not a function:"
807+ FuncName name -> "The `" <> N.toString name <> "` value is not a function:"
808+ CtorName name -> "The `" <> N.toString name <> "` value is not a function:"
809+ OpName op -> "The (" <> N.toString op <> ") operator is not a function:"
810+ ,
811+ H.stack $
812+ [ "It has type:"
813+ , H.indent 4 $ H.dullyellow $ T.toDoc localizer RT.None tipe
814+ , H.reflow $ "So it cannot accept arguments, but it got " <> show numArgs <> " anyway."
815+ ]
816+ )
817+
818+ n ->
819+ Report.toCodeSnippet source region (Just exprRegion)
820+ ( H.reflow $
821+ case maybeFuncName of
822+ NoName -> "This function was given too many arguments:"
823+ FuncName name -> "The `" <> N.toString name <> "` function was given too many arguments:"
824+ CtorName name -> "The `" <> N.toString name <> "` constructor was given too many arguments:"
825+ OpName op -> "The (" <> N.toString op <> ") operator was given too many arguments:"
826+ ,
827+ H.stack $
828+ [ "It has type:"
829+ , H.indent 4 $ H.dullyellow $ T.toDoc localizer RT.None tipe
830+ , H.reflow $ "So it expects " <> H.args n <> ", but it got " <> show numArgs <> " instead."
831+ ]
832+ )
833+
799834 CallArg maybeFuncName index ->
800835 let
801836 thisFunction =
802837 case maybeFuncName of
803− NoName ->
804− "this function"
805−
806− FuncName name ->
807− "`" <> N.toString name <> "`"
808−
809− CtorName name ->
810− "`" <> N.toString name <> "`"
811−
812− OpName op ->
813− "(" <> N.toString op <> ")"
814−
838+ NoName -> "this function"
839+ FuncName name -> "`" <> N.toString name <> "`"
840+ CtorName name -> "`" <> N.toString name <> "`"
841+ OpName op -> "(" <> N.toString op <> ")"
815842 in
816843 Report.toCodeSnippet source region (Just exprRegion)
817844 (