diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-10-12 11:52:01 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-10-12 11:52:01 -0300 |
| commit | 8cddc12efdff4fe1742039df493ab5e425a685c4 (patch) | |
| tree | ed06a2c30307a7f6c16d37622c343b29dc5928e0 /lib/Utilities.ml | |
| parent | a3acc318ead5620ac20f70815b4dfb0810ccd2a4 (diff) | |
| download | RNT-8cddc12efdff4fe1742039df493ab5e425a685c4.tar.gz RNT-8cddc12efdff4fe1742039df493ab5e425a685c4.zip | |
result fold left
Diffstat (limited to 'lib/Utilities.ml')
| -rw-r--r-- | lib/Utilities.ml | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/Utilities.ml b/lib/Utilities.ml index c16be2e..b7fe364 100644 --- a/lib/Utilities.ml +++ b/lib/Utilities.ml @@ -21,6 +21,7 @@ module type SEQUENCE = sig val empty : 'a t val cons : 'a -> 'a t -> 'a t val fold : ('a -> 'b -> 'b) -> 'a t -> 'b -> 'b + val fold_left : ('b -> 'a -> 'b) -> 'b -> 'a t -> 'b end module Generic (S : SEQUENCE) = struct @@ -32,6 +33,14 @@ module Generic (S : SEQUENCE) = struct let* m = m in Ok (S.cons m acc) ) ms (Ok S.empty) + + let fold_left f init ms = + let open Result in + S.fold_left + (fun acc m -> + let* acc = acc in + f acc m ) + (Ok init) ms end module List = struct @@ -41,6 +50,7 @@ module List = struct let empty = [] let cons x xs = x :: xs let fold = List.fold_right + let fold_left = List.fold_left end include Generic (ListSequence) @@ -55,6 +65,7 @@ module FingerTree = struct let empty = BatFingerTree.empty let cons x xs = BatFingerTree.cons xs x let fold f xs acc = BatFingerTree.fold_right (Fun.flip f) acc xs + let fold_left = BatFingerTree.fold_left end include Generic (FingerTreeSequence) |
