diff options
author | Michalis Pardalos <m.pardalos@gmail.com> | 2021-01-25 13:50:10 +0200 |
---|---|---|
committer | Michalis Pardalos <m.pardalos@gmail.com> | 2021-01-25 13:50:10 +0200 |
commit | 2181eac18441168f773e3391c4671619f4339ee6 (patch) | |
tree | 87fbb4c83af5199325027a69ad983f3a9f9f3890 /src/common/Monad.v | |
parent | 9404debd87728ab9b78f8bfed68a758ee03520e3 (diff) | |
download | vericert-2181eac18441168f773e3391c4671619f4339ee6.tar.gz vericert-2181eac18441168f773e3391c4671619f4339ee6.zip |
Implement renumbering (wrong)
Diffstat (limited to 'src/common/Monad.v')
-rw-r--r-- | src/common/Monad.v | 17 |
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 |