aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Utilities.ml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-10-12 11:52:01 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-10-12 11:52:01 -0300
commit8cddc12efdff4fe1742039df493ab5e425a685c4 (patch)
treeed06a2c30307a7f6c16d37622c343b29dc5928e0 /lib/Utilities.ml
parenta3acc318ead5620ac20f70815b4dfb0810ccd2a4 (diff)
downloadRNT-8cddc12efdff4fe1742039df493ab5e425a685c4.tar.gz
RNT-8cddc12efdff4fe1742039df493ab5e425a685c4.zip
result fold left
Diffstat (limited to '')
-rw-r--r--lib/Utilities.ml11
-rw-r--r--lib/Utilities.mli2
2 files changed, 13 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)
diff --git a/lib/Utilities.mli b/lib/Utilities.mli
index 4ab7674..59bc1fc 100644
--- a/lib/Utilities.mli
+++ b/lib/Utilities.mli
@@ -11,6 +11,7 @@ end
module List : sig
val sequence : ('a, 'b) result list -> ('a list, 'b) result
+ val fold_left : ('a -> 'b -> ('a, 'e) result) -> 'a -> 'b list -> ('a, 'e) result
val hd_opt : 'a list -> 'a option
end
@@ -31,6 +32,7 @@ module FingerTree : sig
val map2 : ('a -> 'b -> 'c) -> 'a BatFingerTree.t -> 'b BatFingerTree.t -> 'c BatFingerTree.t
val zip : 'a BatFingerTree.t -> 'b BatFingerTree.t -> ('a * 'b) BatFingerTree.t
val sequence : ('a, 'b) result BatFingerTree.t -> ('a BatFingerTree.t, 'b) result
+ val fold_left : ('a -> 'b -> ('a, 'e) result) -> 'a -> 'b BatFingerTree.t -> ('a, 'e) result
val join : string BatFingerTree.t -> string -> string
end