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