From 6be7dddee2326ad5a6af3a3c15fa06e000facfc4 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 15 Dec 2017 12:45:27 +0100 Subject: [PATCH] make `group_by` lazy --- src/Sequence.ml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Sequence.ml b/src/Sequence.ml index 5819f21..dd6ea4c 100644 --- a/src/Sequence.ml +++ b/src/Sequence.ml @@ -422,14 +422,16 @@ let group_by (type k) ?(hash=Hashtbl.hash) ?(eq=(=)) seq = let hash = hash end) in (* compute group table *) - let tbl = Tbl.create 32 in - seq - (fun x -> - let l = try Tbl.find tbl x with Not_found -> [] in - Tbl.replace tbl x (x::l) - ); + let tbl = lazy ( + let tbl = Tbl.create 32 in + seq + (fun x -> + let l = try Tbl.find tbl x with Not_found -> [] in + Tbl.replace tbl x (x::l)); + tbl + ) in fun yield -> - Tbl.iter (fun _ l -> yield l) tbl + Tbl.iter (fun _ l -> yield l) (Lazy.force tbl) (*$R [1;2;3;3;2;2;3;4]