From a8cd08bfe473f01f245a4808e63809ed1cddc0e7 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Sat, 31 Oct 2026 03:14:07 -0300 Subject: one cursor loop for filtering and projecting --- lib/kernel/Generator.ml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/kernel/Generator.ml') 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) -- cgit v1.2.3