12345678910111213141516171819202122232425262728293031323334353637383940414243moduletypeObj=sigtypet(* 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=tryMemo.findmemoidwithNot_found->dump_memo();raiseNot_foundletof_yojsonjson=_t_of_yojsonjson|>Result.mapto_objletto_yojsonst:Yojson.Safe.t=of_objst|>_t_to_yojsonend