diff options
Diffstat (limited to 'theories')
| -rw-r--r-- | theories/Lists/ListTactics.v | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/theories/Lists/ListTactics.v b/theories/Lists/ListTactics.v index 017a2fe2a0..2da70c4673 100644 --- a/theories/Lists/ListTactics.v +++ b/theories/Lists/ListTactics.v @@ -17,13 +17,17 @@ Ltac list_fold_right fcons fnil l := | nil => fnil end. +(* A variant of list_fold_right, to prevent the match of list_fold_right + from catching errors raised by fcons. *) Ltac lazy_list_fold_right fcons fnil l := - match l with - | ?x :: ?tl => - let cont := lazy_list_fold_right fcons fnil in - fcons x cont tl - | nil => fnil - end. + let f := + match l with + | ?x :: ?tl => + fun _ => + fcons x ltac:(fun _ => lazy_list_fold_right fcons fnil tl) + | nil => fun _ => fnil() + end in + f(). Ltac list_fold_left fcons fnil l := match l with |
