functor (K : Key) (V : Value->
  sig
    type t
    val empty : t
    val of_alist : (K.t * V.t) list -> t
    val to_alist : t -> (K.t * V.t) list
    val of_aarray : (K.t * V.t) array -> t
    val of_sorted_aarray : (K.t * V.t) array -> t
    val of_hashtbl : (K.t, V.t) Core.Std.Hashtbl.t -> t
    val find : t -> K.t -> V.t option
    val mem : t -> K.t -> bool
    val iter : t -> f:(key:K.t -> data:V.t -> unit) -> unit
    val fold :
      t -> init:'acc -> f:(key:K.t -> data:V.t -> 'acc -> 'acc) -> 'acc
    val bin_t : t Core.Std.Bin_prot.Type_class.t
    val bin_read_t : t Core.Std.Bin_prot.Read.reader
    val __bin_read_t__ : (int -> t) Core.Std.Bin_prot.Read.reader
    val bin_reader_t : t Core.Std.Bin_prot.Type_class.reader
    val bin_size_t : t Core.Std.Bin_prot.Size.sizer
    val bin_write_t : t Core.Std.Bin_prot.Write.writer
    val bin_writer_t : t Core.Std.Bin_prot.Type_class.writer
    val t_of_sexp : Sexplib.Sexp.t -> t
    val sexp_of_t : t -> Sexplib.Sexp.t
    val bin_key : K.t Core.Std.Bin_prot.Type_class.t
    val bin_read_key : K.t Core.Std.Bin_prot.Read.reader
    val __bin_read_key__ : (int -> K.t) Core.Std.Bin_prot.Read.reader
    val bin_reader_key : K.t Core.Std.Bin_prot.Type_class.reader
    val bin_size_key : K.t Core.Std.Bin_prot.Size.sizer
    val bin_write_key : K.t Core.Std.Bin_prot.Write.writer
    val bin_writer_key : K.t Core.Std.Bin_prot.Type_class.writer
    val key_of_sexp : Sexplib.Sexp.t -> K.t
    val sexp_of_key : K.t -> Sexplib.Sexp.t
    val bin_value : V.t Core.Std.Bin_prot.Type_class.t
    val bin_read_value : V.t Core.Std.Bin_prot.Read.reader
    val __bin_read_value__ : (int -> V.t) Core.Std.Bin_prot.Read.reader
    val bin_reader_value : V.t Core.Std.Bin_prot.Type_class.reader
    val bin_size_value : V.t Core.Std.Bin_prot.Size.sizer
    val bin_write_value : V.t Core.Std.Bin_prot.Write.writer
    val bin_writer_value : V.t Core.Std.Bin_prot.Type_class.writer
    val value_of_sexp : Sexplib.Sexp.t -> V.t
    val sexp_of_value : V.t -> Sexplib.Sexp.t
  end