`sig
module type Key =
sig
type t
val hash : Hashtbl2.Key.t -> int
val sexp_of_t : Hashtbl2.Key.t -> Sexplib.Sexp.t
val compare : Hashtbl2.Key.t -> Hashtbl2.Key.t -> int
end
type ('key1, 'key2, 'data) t
val invariant :
'a Core_kernel.Invariant_intf.inv ->
'b Core_kernel.Invariant_intf.inv ->
'c Core_kernel.Invariant_intf.inv ->
('a, 'b, 'c) t Core_kernel.Invariant_intf.inv
val clear : ('a, 'b, 'c) Hashtbl2.t -> unit
val add_exn :
('key1, 'key2, 'data) Hashtbl2.t -> 'key1 -> 'key2 -> 'data -> unit
val set :
('key1, 'key2, 'data) Hashtbl2.t -> 'key1 -> 'key2 -> 'data -> unit
val remove_exn : ('key1, 'key2, 'data) Hashtbl2.t -> 'key1 -> 'key2 -> unit
val remove_all1 : ('key1, 'key2, 'data) Hashtbl2.t -> 'key1 -> unit
val find :
('key1, 'key2, 'data) Hashtbl2.t -> 'key1 -> 'key2 -> 'data option
val find1 :
('key1, 'key2, 'data) Hashtbl2.t ->
'key1 -> ('key2, 'data) Core.Std.Hashtbl.t option
val mem1 : ('key1, 'key2, 'data) Hashtbl2.t -> 'key1 -> bool
val iter :
('key1, 'key2, 'data) Hashtbl2.t ->
f:('key1 -> 'key2 -> 'data -> unit) -> unit
val iter_key2 :
('key1, 'key2, 'data) Hashtbl2.t ->
'key1 -> f:('key2 -> 'data -> unit) -> unit
module Make :
functor (Key1 : Key) (Key2 : Key) ->
sig
type 'data t = (Key1.t, Key2.t, 'data) t
val equal : 'a Core.Std.Equal.equal -> 'a t Core.Std.Equal.equal
val create : unit -> 'data Hashtbl2.t
val sexp_of_t :
('data -> Sexplib.Sexp.t) -> 'data Hashtbl2.t -> Sexplib.Sexp.t
end
val sexp_of_t :
('key1 -> Sexplib.Sexp.t) ->
('key2 -> Sexplib.Sexp.t) ->
('data -> Sexplib.Sexp.t) ->
('key1, 'key2, 'data) Hashtbl2.t -> Sexplib.Sexp.t
end`