summaryrefslogtreecommitdiff
path: root/test-suite/bugs/closed/5346.v
diff options
context:
space:
mode:
authorGravatar Benjamin Barenblat <bbaren@debian.org>2018-12-29 14:31:32 -0500
committerGravatar Benjamin Barenblat <bbaren@debian.org>2018-12-29 14:31:32 -0500
commit2708a015fcf65f72328be4296a00dd32b1f1c17a (patch)
tree696f9b5fb84817e1a5c8d9271976a92e25aef18a /test-suite/bugs/closed/5346.v
parentd7d80c5bea564b7cb0eadc33e9ee38c9d9de1cd8 (diff)
parent9043add656177eeac1491a73d2f3ab92bec0013c (diff)
Updated version 8.8.2 from 'upstream/8.8.2'
Diffstat (limited to 'test-suite/bugs/closed/5346.v')
-rw-r--r--test-suite/bugs/closed/5346.v29
1 files changed, 29 insertions, 0 deletions
diff --git a/test-suite/bugs/closed/5346.v b/test-suite/bugs/closed/5346.v
new file mode 100644
index 00000000..0118c187
--- /dev/null
+++ b/test-suite/bugs/closed/5346.v
@@ -0,0 +1,29 @@
+Inductive comp : Type -> Type :=
+| Ret {T} : forall (v:T), comp T
+| Bind {T T'} : forall (p: comp T') (p': T' -> comp T), comp T.
+
+Notation "'do' x .. y <- p1 ; p2" :=
+ (Bind p1 (fun x => .. (fun y => p2) ..))
+ (at level 60, right associativity,
+ x binder, y binder).
+
+Definition Fst1 A B (p: comp (A*B)) : comp A :=
+ do '(a, b) <- p;
+ Ret a.
+
+Definition Fst2 A B (p: comp (A*B)) : comp A :=
+ match tt with
+ | _ => Bind p (fun '(a, b) => Ret a)
+ end.
+
+Definition Fst3 A B (p: comp (A*B)) : comp A :=
+ match tt with
+ | _ => do a <- p;
+ Ret (fst a)
+ end.
+
+Definition Fst A B (p: comp (A * B)) : comp A :=
+ match tt with
+ | _ => do '(a, b) <- p;
+ Ret a
+ end.