123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173(** Functors and interfaces used to make modules hashable. *)open!ImportincludeHashable_intfmoduleMake_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)moduleMake_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_plain_with_hashable(T:sigmoduleKey:sigtypet[@@derivinghash]includeHashtbl.Key_plainwithtypet:=tendvalhashable:Key.tHashtbl_intf.Hashable.tend):S_plainwithtypet:=T.Key.t=structincludeT.KeymoduleTable=Hashtbl.Make_plain_with_hashable(T)moduleHash_set=Hash_set.Make_plain_with_hashable(structmoduleElt=T.Keylethashable=T.hashableend)moduleHash_queue=Hash_queue.Make_with_hashable(T)lethashable=T.hashableendmoduleMake_with_hashable(T:sigmoduleKey:sigtypet[@@derivinghash]includeHashtbl.Keywithtypet:=tendvalhashable:Key.tHashtbl_intf.Hashable.tend):Swithtypet:=T.Key.t=structincludeT.KeymoduleTable=Hashtbl.Make_with_hashable(T)moduleHash_set=Hash_set.Make_with_hashable(structmoduleElt=T.Keylethashable=T.hashableend)moduleHash_queue=Hash_queue.Make_with_hashable(T)lethashable=T.hashableendmoduleMake_binable_with_hashable(T:sigmoduleKey:sigtypet[@@derivinghash]includeHashtbl.Key_binablewithtypet:=tendvalhashable:Key.tHashtbl_intf.Hashable.tend):S_binablewithtypet:=T.Key.t=structmoduleTable=Hashtbl.Make_binable_with_hashable(T)moduleHash_set=Hash_set.Make_binable_with_hashable(structmoduleElt=T.Keylethashable=T.hashableend)moduleHash_queue=Hash_queue.Make_with_hashable(T)includeT.Keylethashable=T.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=structmoduleV1=structmoduletypeS=sigtypekeymoduleTable:sigtype'at=(key,'a)Hashtbl.t[@@derivingsexp,bin_io]endmoduleHash_set:sigtypet=keyHash_set.t[@@derivingsexp,bin_io]endvalhashable:keyHashtbl.Hashable.tendmoduleMake(Key:Hashtbl.Key_binable):Swithtypekey:=Key.t=structmoduleTable=Hashtbl.Make_binable(Key)moduleHash_set=Hash_set.Make_binable(Key)lethashable=Table.hashableendmoduleMake_with_hashable(T:sigmoduleKey:Hashtbl.Key_binablevalhashable:Key.tHashtbl_intf.Hashable.tend):Swithtypekey:=T.Key.t=structmoduleTable=Hashtbl.Make_binable_with_hashable(T)moduleHash_set=Hash_set.Make_binable_with_hashable(structmoduleElt=T.Keylethashable=T.hashableend)lethashable=T.hashableendendend