This PR rewords the "application type mismatch" error message so that the argument and its type precede the application expression.
61 lines
1.1 KiB
Text
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
|