aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-10-12 11:53:45 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-10-12 11:53:45 -0300
commitd4f603fa04283efe54c79b5f7664c4c9bc193857 (patch)
tree4d1ad9b273e9cc305bb02d1a9a8127169799d019
parent8cddc12efdff4fe1742039df493ab5e425a685c4 (diff)
downloadRNT-d4f603fa04283efe54c79b5f7664c4c9bc193857.tar.gz
RNT-d4f603fa04283efe54c79b5f7664c4c9bc193857.zip
concat map
-rw-r--r--lib/Utilities.ml1
-rw-r--r--lib/Utilities.mli1
-rw-r--r--lib/kernel/Branch.ml2
-rw-r--r--lib/kernel/Multigroup.ml2
-rw-r--r--lib/kernel/Path.ml8
-rw-r--r--lib/kernel/Scope.ml4
6 files changed, 7 insertions, 11 deletions
diff --git a/lib/Utilities.ml b/lib/Utilities.ml
index b7fe364..03d1eea 100644
--- a/lib/Utilities.ml
+++ b/lib/Utilities.ml
@@ -55,6 +55,7 @@ module List = struct
include Generic (ListSequence)
+ let concat_map f xs = List.map f xs |> sequence |> Stdlib.Result.map List.concat
let hd_opt = function x :: _ -> Some x | [] -> None
end
diff --git a/lib/Utilities.mli b/lib/Utilities.mli
index 59bc1fc..fb38966 100644
--- a/lib/Utilities.mli
+++ b/lib/Utilities.mli
@@ -12,6 +12,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 concat_map : ('a -> ('b list, 'e) result) -> 'a list -> ('b list, 'e) result
val hd_opt : 'a list -> 'a option
end
diff --git a/lib/kernel/Branch.ml b/lib/kernel/Branch.ml
index 25c2e7b..561bff3 100644
--- a/lib/kernel/Branch.ml
+++ b/lib/kernel/Branch.ml
@@ -136,7 +136,7 @@ module Make (S : Abstract.Storage.STORAGE) = struct
object
method check =
let* named = Prototype.Directory.children multigroups in
- List.map admits named |> Utilities.List.sequence |> Result.map List.concat
+ Utilities.List.concat_map admits named
end;
Prototype.Associative.(
of_properties
diff --git a/lib/kernel/Multigroup.ml b/lib/kernel/Multigroup.ml
index 13ca7e0..9fbd386 100644
--- a/lib/kernel/Multigroup.ml
+++ b/lib/kernel/Multigroup.ml
@@ -226,7 +226,7 @@ module Make (S : Abstract.Storage.STORAGE) = struct
method check =
let open Utilities.Result in
let* named = Prototype.Directory.children (relations ?bind storage denial_tree) in
- List.map (held ?bind) named |> Utilities.List.sequence |> Result.map List.concat
+ Utilities.List.concat_map (held ?bind) named
method protocols : Protocols.Handle.protocol list =
let open Utilities.Result in
diff --git a/lib/kernel/Path.ml b/lib/kernel/Path.ml
index a6879b6..4859584 100644
--- a/lib/kernel/Path.ml
+++ b/lib/kernel/Path.ml
@@ -106,7 +106,7 @@ let assoc_all handle changes =
| Some (_, key, _) -> Error (Error.overlapping_change (prefix @ [key]))
| None ->
let* children =
- List.map
+ Utilities.List.concat_map
(fun (x, beneath) ->
let* dir = Handle.require Directory.from node in
let* found = Directory.find dir x in
@@ -117,8 +117,6 @@ let assoc_all handle changes =
Handle.releasing child (fun () -> apply (prefix @ [x]) child beneath)
|> Result.map (fun child' -> [x, Some child']) )
below
- |> Utilities.List.sequence
- |> Result.map List.concat
in
(* each step derives from the last; only the steps in between are
ours to release *)
@@ -156,7 +154,7 @@ let diff a b =
let* left = names a in
let* right = names b in
List.sort_uniq String.compare (left @ right)
- |> List.map (fun name ->
+ |> Utilities.List.concat_map (fun name ->
let path = prefix @ [name] in
let* x = find a name in
let* y = find b name in
@@ -170,7 +168,5 @@ let diff a b =
let* below = walk path x y in
Ok (if below = [] then [path] else below)
| _ -> Ok [path] ) )
- |> Utilities.List.sequence
- |> Result.map List.concat
in
walk [] a b
diff --git a/lib/kernel/Scope.ml b/lib/kernel/Scope.ml
index 23698ba..8868600 100644
--- a/lib/kernel/Scope.ml
+++ b/lib/kernel/Scope.ml
@@ -55,9 +55,7 @@ let catalog_of branch =
Ok (List.map (name prefix) (BatFingerTree.to_list names))
| Some level, rest ->
let* named = Prototype.Directory.children level in
- List.map (fun (n, child) -> down (n :: prefix) child rest) named
- |> Utilities.List.sequence
- |> Result.map List.concat
+ Utilities.List.concat_map (fun (n, child) -> down (n :: prefix) child rest) named
in
down [] branch ["multigroup"; "schema"; "relation"]