sig
  type t = Univ_map.t
  val empty : t
  val is_empty : t -> bool
  module Key :
    sig
      type 'a t = 'Univ_map.Key.t
      val create : string -> ('-> Std_internal.Sexp.t) -> 'a t
    end
  val set : t -> 'Key.t -> '-> t
  val mem : t -> 'Key.t -> bool
  val find : t -> 'Key.t -> 'a option
  val find_exn : t -> 'Key.t -> 'a
  val add : t -> 'Key.t -> '-> [ `Duplicate | `Ok of t ]
  val add_exn : t -> 'Key.t -> '-> t
  val change : t -> 'Key.t -> ('a option -> 'a option) -> t
  val change_exn : t -> 'Key.t -> ('-> 'a) -> t
  module With_default :
    sig
      module Key :
        sig
          type 'a t = 'Univ_map.With_default.Key.t
          val create :
            default:'-> string -> ('-> Std_internal.Sexp.t) -> 'a t
        end
      val set : t -> 'Key.t -> '-> t
      val find : t -> 'Key.t -> 'a
      val change : t -> 'Key.t -> ('-> 'a) -> t
    end
  module With_fold :
    sig
      module Key :
        sig
          type ('a, 'b) t = ('a, 'b) Univ_map.With_fold.Key.t
          val create :
            init:'->
            f:('-> '-> 'b) ->
            string -> ('-> Std_internal.Sexp.t) -> ('a, 'b) t
        end
      val set : t -> ('a, 'b) Key.t -> '-> t
      val find : t -> ('a, 'b) Key.t -> 'b
      val add : t -> ('a, 'b) Key.t -> '-> t
      val change : t -> ('a, 'b) Key.t -> ('-> 'b) -> t
    end
  module Multi :
    sig
      module Key :
        sig
          type 'a t = 'Univ_map.Multi.Key.t
          val create : string -> ('-> Std_internal.Sexp.t) -> 'a t
        end
      val set : t -> 'Key.t -> 'a list -> t
      val find : t -> 'Key.t -> 'a list
      val add : t -> 'Key.t -> '-> t
      val change : t -> 'Key.t -> ('a list -> 'a list) -> t
    end
  val sexp_of_t : t -> Sexplib.Sexp.t
  val ounit_tests : unit -> OUnit.test
end