aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/Generator.ml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-10-31 03:14:07 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-10-31 03:14:07 -0300
commita8cd08bfe473f01f245a4808e63809ed1cddc0e7 (patch)
treeff9f4d3875fadd157e982f3a98ea026dfaea3f8b /lib/kernel/Generator.ml
parent97dc56016bd0c7ddea4445c5ea5978220cc9e776 (diff)
downloadRNT-a8cd08bfe473f01f245a4808e63809ed1cddc0e7.tar.gz
RNT-a8cd08bfe473f01f245a4808e63809ed1cddc0e7.zip
one cursor loop for filtering and projecting
Diffstat (limited to 'lib/kernel/Generator.ml')
-rw-r--r--lib/kernel/Generator.ml6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/kernel/Generator.ml b/lib/kernel/Generator.ml
index a037b3d..4fd1ce0 100644
--- a/lib/kernel/Generator.ml
+++ b/lib/kernel/Generator.ml
@@ -54,7 +54,7 @@ class producer_cursor produce finally =
let cursor_of ?finally produce = new producer_cursor produce finally |> Protocols.Handle.make
-let filter keep cursor =
+let filter_map f cursor =
cursor_of
~finally:(fun () -> Protocols.Handle.release cursor)
(fun ~yield ->
@@ -65,7 +65,9 @@ let filter keep cursor =
match next with
| None -> Ok ()
| Some tuple ->
- if keep tuple then yield tuple;
+ Option.iter yield (f tuple);
pass ()
in
pass () )
+
+let filter keep = filter_map (fun tuple -> if keep tuple then Some tuple else None)