sig
  type t
  type 'a data
  val invariant : t Invariant_intf.inv
  val empty : Univ_map_intf.S.t
  val is_empty : Univ_map_intf.S.t -> bool
  val set :
    Univ_map_intf.S.t ->
    'Key.t -> 'Univ_map_intf.S.data -> Univ_map_intf.S.t
  val mem : Univ_map_intf.S.t -> 'Key.t -> bool
  val find : Univ_map_intf.S.t -> 'Key.t -> 'Univ_map_intf.S.data option
  val find_exn : Univ_map_intf.S.t -> 'Key.t -> 'Univ_map_intf.S.data
  val add :
    Univ_map_intf.S.t ->
    'Key.t ->
    'Univ_map_intf.S.data -> [ `Duplicate | `Ok of Univ_map_intf.S.t ]
  val add_exn :
    Univ_map_intf.S.t ->
    'Key.t -> 'Univ_map_intf.S.data -> Univ_map_intf.S.t
  val change :
    Univ_map_intf.S.t ->
    'Key.t ->
    ('Univ_map_intf.S.data option -> 'Univ_map_intf.S.data option) ->
    Univ_map_intf.S.t
  val change_exn :
    Univ_map_intf.S.t ->
    'Key.t ->
    ('Univ_map_intf.S.data -> 'Univ_map_intf.S.data) -> Univ_map_intf.S.t
  module Packed :
    sig
      type t =
          T : 'Key.t * 'Univ_map_intf.S.data -> Univ_map_intf.S.Packed.t
    end
  val to_alist : Univ_map_intf.S.t -> Univ_map_intf.S.Packed.t list
  val sexp_of_t : Univ_map_intf.S.t -> Sexplib.Sexp.t
end