aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-10-24 03:16:19 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-10-24 03:35:41 +0000
commitdf6c0744dc4ebd164cd8a309eef5d2798b2d3e90 (patch)
tree62003d9fa9bf1129c408a1fc12dc86ecc32ddd47
parent2f9e0c580645fe797e71b6183cb69475915da55b (diff)
downloadRNT-df6c0744dc4ebd164cd8a309eef5d2798b2d3e90.tar.gz
RNT-df6c0744dc4ebd164cd8a309eef5d2798b2d3e90.zip
Monadic `concat_mapm`
-rw-r--r--lib/Utilities.ml4
-rw-r--r--lib/Utilities.mli4
2 files changed, 5 insertions, 3 deletions
diff --git a/lib/Utilities.ml b/lib/Utilities.ml
index dcf4417..6f27b30 100644
--- a/lib/Utilities.ml
+++ b/lib/Utilities.ml
@@ -55,7 +55,7 @@ module List = struct
include Generic (ListSequence)
- let concat_map f xs = List.map f xs |> sequence |> Stdlib.Result.map List.concat
+ let concat_mapm f xs = List.map f xs |> sequence |> Stdlib.Result.map List.concat
let hd_opt = function x :: _ -> Some x | [] -> None
end
@@ -93,6 +93,8 @@ module FingerTree = struct
match f elem with None -> acc | Some result -> BatFingerTree.snoc acc result)
BatFingerTree.empty
+ let concat_mapm f xs = BatFingerTree.map f xs |> sequence |> Stdlib.Result.map BatFingerTree.append
+
let concat_map f =
BatFingerTree.fold_left (fun acc elem -> BatFingerTree.append acc @@ f elem) BatFingerTree.empty
diff --git a/lib/Utilities.mli b/lib/Utilities.mli
index 7d41e20..3f0787f 100644
--- a/lib/Utilities.mli
+++ b/lib/Utilities.mli
@@ -12,7 +12,7 @@ end
module List : sig
val sequence : ('a, 'b) result list -> ('a list, 'b) result
val foldm_left : ('a -> 'b -> ('a, 'e) result) -> 'a -> 'b list -> ('a, 'e) result
- val concat_map : ('a -> ('b list, 'e) result) -> 'a list -> ('b list, 'e) result
+ val concat_mapm : ('a -> ('b list, 'e) result) -> 'a list -> ('b list, 'e) result
val hd_opt : 'a list -> 'a option
end
@@ -36,7 +36,7 @@ module FingerTree : sig
val foldm_left : ('a -> 'b -> ('a, 'e) result) -> 'a -> 'b BatFingerTree.t -> ('a, 'e) result
val join : string BatFingerTree.t -> string -> string
val filter_map : ('a -> 'b option) -> 'a BatFingerTree.t -> 'b BatFingerTree.t
- val concat_map : ('a -> ('b BatFingerTree.t, 'e) result) -> 'a BatFingerTree.t -> ('b BatFingerTree.t, 'e) result
+ val concat_mapm : ('a -> ('b BatFingerTree.t, 'e) result) -> 'a BatFingerTree.t -> ('b BatFingerTree.t, 'e) result
end
module Fun : sig