aboutsummaryrefslogtreecommitdiff
path: root/theories
diff options
context:
space:
mode:
Diffstat (limited to 'theories')
-rw-r--r--theories/Lists/ListTactics.v16
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