(*let module S = Set.Make (Text) in*) (*let module M = Map.Make (String) in*) (*let module I = Map.Make (Id) in*) (*let aggr = I.empty, M.empty, M.empty, M.empty in*) (*let fn (id, a, t, k) (n,_) =*) (* let id = I.add n.Text.uuid n id in*) (* let a =*) (* let f e a = M.update (e.Person.name) (function Some v -> Some (S.add n v) | None -> Some (S.singleton n)) a in*) (* Person.Set.fold f n.Text.authors a in*) (* let t =*) (* let f e a = M.update e (function Some v -> Some (S.add n v) | None -> Some (S.singleton n)) a in*) (* String_set.fold f (Text.set "Topics" n) t in*) (* let k =*) (* let f e a = M.update e (function Some v -> Some (S.add n v) | None -> Some (S.singleton n)) a in*) (* String_set.fold f (Text.set "Keywords" n) k in*) (* (id, a, t, k)*) module Make (Store : Store.T) = struct include Store let predicate fn opt = Option.(to_list @@ map fn opt) let authored query_string = let q = Person.Set.of_query @@ String_set.query query_string in fun n -> Person.Set.predicate q n.Text.authors let keyworded query_string = let q = String_set.query query_string in fun n -> String_set.(predicate q (Text.set "Keywords" n)) let topics query_string = let q = String_set.query query_string in fun n -> String_set.(predicate q (Text.set "Topics" n)) end