From 76cc9ce576e830a3ee7615d0f617a7ce24316c44 Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Wed, 7 Jan 2026 22:37:44 +0100 Subject: pre-destruction commit --- lib/prelude.ml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'lib/prelude.ml') diff --git a/lib/prelude.ml b/lib/prelude.ml index 57f7af3..f571a4d 100644 --- a/lib/prelude.ml +++ b/lib/prelude.ml @@ -16,6 +16,29 @@ module List = struct go end +module Map = struct + include Map + + let fold_result (m : ('k, 'v, _) t) ~(init : 'acc) + ~(f : key:'k -> data:'v -> 'acc -> ('acc, 'err) result) : + ('acc, 'err) result = + fold_until m ~init + ~f:(fun ~key ~data acc -> + match f ~key ~data acc with + | Ok acc' -> Continue acc' + | Error _ as res -> Stop res) + ~finish:(fun v -> Ok v) + + let fold_option (m : ('k, 'v, _) t) ~(init : 'acc) + ~(f : key:'k -> data:'v -> 'acc -> 'acc option) : 'acc option = + fold_until m ~init + ~f:(fun ~key ~data acc -> + match f ~key ~data acc with + | Some acc' -> Continue acc' + | None -> Stop None) + ~finish:(fun v -> Some v) +end + module Z = struct include Z -- cgit v1.2.3