sig
  type ('k, 'v) t = ('k, 'v) Multi_map.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) ->
    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.t
  val empty : ('k, 'v) t
  val singleton : '-> '-> ('k, 'v) t
  val is_empty : ('k, 'v) t -> bool
  val add : key:'-> data:'-> ('k, 'v) t -> ('k, 'v) t
  val find : ('k, 'v) t -> '-> 'v list
  val remove : ('k, 'v) t -> '-> ('k, 'v) t
  val set : key:'-> data:'v list -> ('k, 'v) t -> ('k, 'v) t
  val mem : ('k, 'v) t -> '-> bool
  val keys : ('k, 'v) t -> 'k list
  val iter : f:(key:'-> data:'-> unit) -> ('k, 'v) t -> unit
  val map : f:('-> 'b) -> ('k, 'a) t -> ('k, 'b) t
  val mapi : f:(key:'-> data:'-> 'b) -> ('k, 'a) t -> ('k, 'b) t
  val fold : f:(key:'-> data:'-> '-> 'a) -> ('k, 'v) t -> init:'-> 'a
  val filter : f:(key:'-> data:'-> bool) -> ('k, 'v) t -> ('k, 'v) t
  val reduce :
    f:('v list -> 'r) -> ('k, 'v) t -> ('k, 'r) Core.Std.Map.Poly.t
end