diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-10-31 03:14:07 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-10-31 03:14:07 -0300 |
| commit | a8cd08bfe473f01f245a4808e63809ed1cddc0e7 (patch) | |
| tree | ff9f4d3875fadd157e982f3a98ea026dfaea3f8b /lib/kernel | |
| parent | 97dc56016bd0c7ddea4445c5ea5978220cc9e776 (diff) | |
| download | RNT-a8cd08bfe473f01f245a4808e63809ed1cddc0e7.tar.gz RNT-a8cd08bfe473f01f245a4808e63809ed1cddc0e7.zip | |
one cursor loop for filtering and projecting
Diffstat (limited to 'lib/kernel')
| -rw-r--r-- | lib/kernel/Generator.ml | 6 |
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) |
