This PR gives anonymous constructor notation (`⟨x,y⟩`) an error recovery mechanism where if there are not enough arguments then synthetic sorries are inserted for the missing arguments and an error is logged, rather than outright failing. Closes #9591.
51 lines
1.4 KiB
Text
51 lines
1.4 KiB
Text
/-!
|
||
# Error recovery for anonymous constructor notation
|
||
https://github.com/leanprover/lean4/issues/9591
|
||
|
||
When errToSorry is enabled, and too few arguments are provided, now it inserts `sorry`s
|
||
while logging an error (rather than throwing an error).
|
||
-/
|
||
|
||
/--
|
||
error: Insufficient number of fields for `⟨...⟩` constructor: Constructor `Prod.mk` has 2 explicit field, but none were provided
|
||
---
|
||
info: have this := (sorry, sorry);
|
||
this : Nat × Nat
|
||
-/
|
||
#guard_msgs in #check show Nat × Nat from ⟨⟩
|
||
|
||
/--
|
||
error: Insufficient number of fields for `⟨...⟩` constructor: Constructor `Prod.mk` has 2 explicit field, but only 1 was provided
|
||
---
|
||
info: have this := (2, sorry);
|
||
this : Nat × Nat
|
||
-/
|
||
#guard_msgs in #check show Nat × Nat from ⟨2⟩
|
||
|
||
/--
|
||
error: Insufficient number of fields for `⟨...⟩` constructor: Constructor `Prod.mk` has 2 explicit field, but only 1 was provided
|
||
---
|
||
error: Unknown constant `Nat.su`
|
||
|
||
Note: Inferred this name from the expected resulting type of `.su`:
|
||
Nat
|
||
---
|
||
info: have this := (sorry, sorry);
|
||
this : Nat × Nat
|
||
-/
|
||
#guard_msgs in #check show Nat × Nat from ⟨.su⟩
|
||
|
||
/--
|
||
info: have this := (2, 3);
|
||
this : Nat × Nat
|
||
-/
|
||
#guard_msgs in #check show Nat × Nat from ⟨2,3⟩
|
||
|
||
/-!
|
||
The `first` tactic disables errToSorry, which is how the first `exact` throws an exception rather than logging an error.
|
||
-/
|
||
/--
|
||
info: have this := (2, 3);
|
||
this : Nat × Nat
|
||
-/
|
||
#guard_msgs in #check show Nat × Nat by first | exact ⟨1⟩ | exact ⟨2,3⟩
|