This PR improves the error message encountered in the case of a type class instance resolution failure, and adds an error explanation that discusses the common new-user case of binary operation overloading and points to the `trace.Meta.synthInstance` option for advanced debugging. ## Example ```lean4 def f (x : String) := x + x ``` Before: ``` failed to synthesize HAdd String String ?m.5 Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command. ``` After: ``` failed to synthesize instance of type class HAdd String String ?m.5 Hint: Type class instance resolution failures can be inspected with the `set_option trace.Meta.synthInstance true` command. Error code: lean.failedToSynthesizeTypeclassInstance [View explanation](https://lean-lang.org/doc/reference/latest/find/?domain=Manual.errorExplanation&name=lean.failedToSynthesizeTypeclassInstance) ``` The error message is changed in three important ways: * Explains *what* failed to synthesize, using the "type class" terminology that's more likely to be recognized than the "instance" terminology * Points to the `trace.Meta.synthInstance` option which is otherwise nearly undiscoverable but is quite powerful (see also leanprover/reference-manual#663 which is adding commentary on this option) * Gives an error explanation link (which won't actually work until the next release after this is merged) which prioritizes the common-case explanation of using the wrong binary operation
55 lines
1.9 KiB
Text
55 lines
1.9 KiB
Text
{"version": 1,
|
|
"uri": "file:///4880.lean",
|
|
"diagnostics":
|
|
[{"source": "Lean 4",
|
|
"severity": 1,
|
|
"range":
|
|
{"start": {"line": 16, "character": 12},
|
|
"end": {"line": 17, "character": 0}},
|
|
"message":
|
|
"could not synthesize default value for field 'h1' of 'B' using tactics",
|
|
"fullRange":
|
|
{"start": {"line": 16, "character": 12},
|
|
"end": {"line": 20, "character": 0}}},
|
|
{"source": "Lean 4",
|
|
"severity": 1,
|
|
"range":
|
|
{"start": {"line": 16, "character": 12},
|
|
"end": {"line": 17, "character": 0}},
|
|
"message":
|
|
"failed to synthesize instance of type class\n A\n\nHint: Type class instance resolution failures can be inspected with the `set_option trace.Meta.synthInstance true` command.",
|
|
"fullRange":
|
|
{"start": {"line": 16, "character": 12},
|
|
"end": {"line": 20, "character": 0}},
|
|
"code": "lean.synthInstanceFailed"},
|
|
{"source": "Lean 4",
|
|
"severity": 1,
|
|
"range":
|
|
{"start": {"line": 22, "character": 17},
|
|
"end": {"line": 22, "character": 20}},
|
|
"message":
|
|
"could not synthesize default value for parameter '_h1' using tactics",
|
|
"fullRange":
|
|
{"start": {"line": 22, "character": 17},
|
|
"end": {"line": 22, "character": 20}}},
|
|
{"source": "Lean 4",
|
|
"severity": 1,
|
|
"range":
|
|
{"start": {"line": 22, "character": 17},
|
|
"end": {"line": 22, "character": 20}},
|
|
"message":
|
|
"failed to synthesize instance of type class\n A\n\nHint: Type class instance resolution failures can be inspected with the `set_option trace.Meta.synthInstance true` command.",
|
|
"fullRange":
|
|
{"start": {"line": 22, "character": 17},
|
|
"end": {"line": 22, "character": 20}},
|
|
"code": "lean.synthInstanceFailed"},
|
|
{"source": "Lean 4",
|
|
"severity": 1,
|
|
"range":
|
|
{"start": {"line": 34, "character": 13},
|
|
"end": {"line": 35, "character": 0}},
|
|
"message": "unsolved goals\n⊢ A",
|
|
"leanTags": [1],
|
|
"fullRange":
|
|
{"start": {"line": 34, "character": 13},
|
|
"end": {"line": 36, "character": 0}}}]}
|