module type Key : sig ... endinclude sig ... endval sexp_of_t : ('key1 ‑> Base.Sexp.t) ‑> ('key2 ‑> Base.Sexp.t) ‑> ('data ‑> Base.Sexp.t) ‑> ('key1, 'key2, 'data) t ‑> Base.Sexp.tinclude Core.Invariant.S3 with type (a, b, c) t := (a, b, c) tval invariant : 'a Base__.Invariant_intf.inv ‑> 'b Base__.Invariant_intf.inv ‑> 'c Base__.Invariant_intf.inv ‑> ('a, 'b, 'c) t Base__.Invariant_intf.invval clear : (_, _, _) t ‑> unitval add_exn : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> 'data ‑> unitval set : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> 'data ‑> unitval remove_exn : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> unitval remove_all1 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> unitval find : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> 'data optionval find1 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> ('key2, 'data) Core.Hashtbl.t optionval mem : ('key1, 'key2, 'data) t ‑> 'key1 ‑> 'key2 ‑> boolval mem1 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> boolmem1 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) ‑> unitval iter1 : ('key1, 'key2, 'data) t ‑> f:('key1 ‑> ('key2, 'data) Core.Hashtbl.t ‑> unit) ‑> unitval iter_key2 : ('key1, 'key2, 'data) t ‑> 'key1 ‑> f:('key2 ‑> 'data ‑> unit) ‑> unititer_key2 t key1 ~f is a no-op unless mem1 t key1 *