lean4-htt/tests/lean/run/439.lean
jrr6 e9a318df16
fix: reorder "application type mismatch" message (#9287)
This PR rewords the "application type mismatch" error message so that
the argument and its type precede the application expression.
2025-07-15 19:20:18 +00:00

61 lines
1.1 KiB
Text

set_option pp.mvars false
universe u
structure Fn (E I : Sort u) := (exp : E) (imp : I)
instance (E I : Sort u) : CoeFun (Fn E I) (fun _ => I) := {coe := fun K => K.imp}
class Bar.{w} (P : Sort u) :=
fn : P -> Sort w
variable {P : Sort u} (B : Bar P)
variable (fn : Fn ((p : P) -> B.fn p) ({p : P} -> B.fn p))
#check (@fn : {p : P} → Bar.fn p) -- Result is as expected (implicit)
/-
fn.imp : {p : P} → Bar.fn p
-/
variable (p : P)
variable (Bp : Bar.fn p)
/--
error: Function expected at
fn.imp
but this term has type
Bar.fn ?_
Note: Expected a function because this term is being applied to the argument
Bp
-/
#guard_msgs in
#check fn Bp
/--
error: Function expected at
fn.imp
but this term has type
Bar.fn ?_
Note: Expected a function because this term is being applied to the argument
p
-/
#guard_msgs in
#check fn p
#check fn (p := p)
variable (fn' : Fn ((p : P) -> B.fn p -> B.fn p) ({p : P} -> B.fn p -> B.fn p))
#check fn' Bp
/--
error: Application type mismatch: The argument
p
has type
P
but is expected to have type
Bar.fn ?_
in the application
fn'.imp p
-/
#guard_msgs in
#check fn' p