This PR improves the “expected type mismatch” error message by omitting the type's types when they are defeq, and putting them into separate lines when not. I found it rather tediuos to parse the error message when the expected type is long, because I had to find the `:` in the middle of a large expression somewhere. Also, when both are of sort `Prop` or `Type` it doesn't add much value to print the sort (and it’s only one hover away anyways).
21 lines
690 B
Text
21 lines
690 B
Text
diamond1.lean:11:40-11:45: error: field type mismatch, field 'a' from parent 'Baz' has type
|
||
α → α
|
||
but is expected to have type
|
||
α
|
||
structure Foo (α : Type) : Type
|
||
number of parameters: 1
|
||
parents:
|
||
Foo.toBar : Bar (α → α)
|
||
Foo.toBaz : Baz α
|
||
fields:
|
||
Bar.a : α → α
|
||
Bar.b : Nat → α → α
|
||
Baz.c : Bool → α
|
||
Baz.d : Nat
|
||
constructor:
|
||
Foo.mk {α : Type} (toBar : Bar (α → α)) (c : Bool → α) (d : Nat) : Foo α
|
||
field notation resolution order:
|
||
Foo, Bar, Baz
|
||
def f : Nat → Foo Nat :=
|
||
fun x => { a := fun y => x + y, b := fun x1 x2 => x1 + x2, c := fun x_1 => x, d := x }
|
||
diamond1.lean:27:47-27:52: warning: field 'a' from 'Baz' has already been declared
|