123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131(** Functors and interfaces used to make modules hashable. *)open!ImportmoduleBinable=Binable0moduletypeCommon=sigtypet[@@derivingcompare,hash]valhashable:tHashtbl.Hashable.tendmoduletypeS_plain=sigincludeCommonmoduleTable:Hashtbl.S_plainwithtypekey=tmoduleHash_set:Hash_set.S_plainwithtypeelt=tmoduleHash_queue:Hash_queue.SwithtypeKey.t=tendmoduletypeS=sigincludeCommonmoduleTable:Hashtbl.Swithtypekey=tmoduleHash_set:Hash_set.Swithtypeelt=tmoduleHash_queue:Hash_queue.SwithtypeKey.t=tendmoduleMake_plain(T:sigtypet[@@derivinghash]includeHashtbl.Key_plainwithtypet:=tend):S_plainwithtypet:=T.t=structincludeTmoduleTable=Hashtbl.Make_plain(T)moduleHash_set=Hash_set.Make_plain(T)moduleHash_queue=Hash_queue.Make(T)lethashable=Table.hashableendmoduleMake_plain_and_derive_hash_fold_t(T:Hashtbl.Key_plain):S_plainwithtypet:=T.t=Make_plain(structincludeTlethash_fold_tstatet=hash_fold_intstate(hasht)end)moduleMake(T:sigtypet[@@derivinghash]includeHashtbl.Keywithtypet:=tend):Swithtypet:=T.t=structincludeTmoduleTable=Hashtbl.Make(T)moduleHash_set=Hash_set.Make(T)moduleHash_queue=Hash_queue.Make(T)lethashable=Table.hashableendmoduleMake_and_derive_hash_fold_t(T:Hashtbl.Key):Swithtypet:=T.t=Make(structincludeTlethash_fold_tstatet=hash_fold_intstate(hasht)end)moduletypeS_binable=sigtypet[@@derivinghash]valhashable:tHashtbl.Hashable.tmoduleTable:Hashtbl.S_binablewithtypekey=tmoduleHash_set:Hash_set.S_binablewithtypeelt=tmoduleHash_queue:Hash_queue.SwithtypeKey.t=tendmoduleMake_binable(T:sigtypet[@@derivinghash]includeHashtbl.Key_binablewithtypet:=tend):S_binablewithtypet:=T.t=structmoduleTable=Hashtbl.Make_binable(T)moduleHash_set=Hash_set.Make_binable(T)moduleHash_queue=Hash_queue.Make(T)includeTlethashable=Table.hashableendmoduleMake_binable_and_derive_hash_fold_t(T:Hashtbl.Key_binable):S_binablewithtypet:=T.t=Make_binable(structincludeTlethash_fold_tstatet=hash_fold_intstate(hasht)end)moduleStable:sigmoduleV1:sigmoduletypeS=sigtypekeymoduleTable:sigtype'at=(key,'a)Hashtbl.t[@@derivingsexp,bin_io]endmoduleHash_set:sigtypet=keyHash_set.t[@@derivingsexp,bin_io]endendmoduleMake(Key:Hashtbl.Key_binable):Swithtypekey:=Key.tendend=structmoduleV1=structmoduletypeS=sigtypekeymoduleTable:sigtype'at=(key,'a)Hashtbl.t[@@derivingsexp,bin_io]endmoduleHash_set:sigtypet=keyHash_set.t[@@derivingsexp,bin_io]endendmoduleMake(Key:Hashtbl.Key_binable):Swithtypekey:=Key.t=structmoduleTable=Hashtbl.Make_binable(Key)moduleHash_set=Hash_set.Make_binable(Key)endendend