12345678910111213141516171819202122232425262728293031323334353637383940414243444546moduletypeObj=sigvalname:stringtypet(* Not yet *)(* val equal : t -> t -> bool *)endmoduletypeS=sigtypet[@@derivingyojson]endmoduleMake(O:Obj):Swithtypet=O.t=structtypet=O.ttype_t=int[@@derivingyojson]moduleMemo=Hashtbl.Make(Int)letmemo=Memo.create1000letdump_memo()=letkeys=Memo.to_seq_keysmemo|>List.of_seqinFormat.(eprintf"@[size: %d@]@\n%!"(List.lengthkeys));Format.(eprintf"@[<v>%a@]@\n%!"(pp_print_listpp_print_int)keys)letlast_id=ref0letmk_id_=incrlast_id;!last_idletof_obj(s:O.t):int=letid=mk_idsinlet()=Memo.addmemoidsinidletto_obj(id:int):(O.t,_)Result.t=matchMemo.find_optmemoidwith|Somev->Okv|None->iffalsethendump_memo();Error(Format.asprintf"key %d for object %s not found"idO.name)letof_yojsonjson=_t_of_yojsonjson|>funr->Result.bindrto_objletto_yojsonst:Yojson.Safe.t=of_objst|>_t_to_yojsonend