module type Key : sig ... end
include sig ... end
val sexp_of_t : ('key1 ‑> Base.Sexp.t) ‑> ('key2 ‑> Base.Sexp.t) ‑> ('data ‑> Base.Sexp.t) ‑> ('key1, 'key2, 'data) t ‑> Base.Sexp.t
include Core.Invariant.S3 with type (a, b, c) t := (a, b, c) t
val invariant : 'a Base__.Invariant_intf.inv ‑> 'b Base__.Invariant_intf.inv ‑> 'c Base__.Invariant_intf.inv ‑> ('a, 'b, 'c) t Base__.Invariant_intf.inv
val clear : (_, _, _) t ‑> unit
val add_exn : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> 'data ‑> unit
val set : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> 'data ‑> unit
val remove_exn : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> unit
val remove_all1 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> unit
val find : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> 'data option
val find1 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> ('key2, 'data) Core.Hashtbl.t option
val mem : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> bool
val mem1 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> bool
mem1 t key1
is true iff \exists key2 s.t. find t key1 key2
is not None *
val iter : ('key1, 'key2, 'data) t ‑> f:('key1 ‑> 'key2 ‑> 'data ‑> unit) ‑> unit
val iter1 : ('key1, 'key2, 'data) t ‑> f:('key1 ‑> ('key2, 'data) Core.Hashtbl.t ‑> unit) ‑> unit
val iter_key2 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> f:('key2 ‑> 'data ‑> unit) ‑> unit
iter_key2 t key1 ~f
is a no-op unless mem1 t key1
*