aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/Monad.v
diff options
context:
space:
mode:
authorMichalis Pardalos <m.pardalos@gmail.com>2021-01-25 13:50:10 +0200
committerMichalis Pardalos <m.pardalos@gmail.com>2021-01-25 13:50:10 +0200
commit2181eac18441168f773e3391c4671619f4339ee6 (patch)
tree87fbb4c83af5199325027a69ad983f3a9f9f3890 /src/common/Monad.v
parent9404debd87728ab9b78f8bfed68a758ee03520e3 (diff)
downloadvericert-2181eac18441168f773e3391c4671619f4339ee6.tar.gz
vericert-2181eac18441168f773e3391c4671619f4339ee6.zip
Implement renumbering (wrong)
Diffstat (limited to 'src/common/Monad.v')
-rw-r--r--src/common/Monad.v17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/common/Monad.v b/src/common/Monad.v
index 8517186..03dd294 100644
--- a/src/common/Monad.v
+++ b/src/common/Monad.v
@@ -30,15 +30,26 @@ Module MonadExtra(M : Monad).
End MonadNotation.
Import MonadNotation.
- Fixpoint traverselist {A B: Type} (f: A -> mon B) (l: list A) {struct l}: mon (list B) :=
+ Fixpoint sequence {A: Type} (l: list (mon A)) {struct l}: mon (list A) :=
match l with
| nil => ret nil
| x::xs =>
- do r <- f x;
- do rs <- traverselist f xs;
+ do r <- x;
+ do rs <- sequence xs;
ret (r::rs)
end.
+ Fixpoint traverselist {A B: Type} (f: A -> mon B) (l: list A) {struct l}: mon (list B) :=
+ sequence (map f l).
+
+ Fixpoint traverseoption {A B: Type} (f: A -> mon B) (opt: option A) {struct opt}: mon (option B) :=
+ match opt with
+ | None => ret None
+ | Some x =>
+ do r <- f x;
+ ret (Some r)
+ end.
+
Fixpoint collectlist {A : Type} (f : A -> mon unit) (l : list A) {struct l} : mon unit :=
match l with
| nil => ret tt