# Module type Univ_map_intf.S

    module type S = sig .. end

    type t

    type 'a data

    include Invariant.S

    val empty : t

    val is_empty : t -> bool

    val set : t -> 'a Key.t -> 'a data -> t

    val mem : t -> 'a Key.t -> bool

    val find : t -> 'a Key.t -> 'a data option

    val find_exn : t -> 'a Key.t -> 'a data

    val add : t ->
           'a Key.t ->
           'a data -> [ `Duplicate | `Ok of t ]

    val add_exn : t -> 'a Key.t -> 'a data -> t

    val change : t ->
           'a Key.t ->
           ('a data option -> 'a data option) ->
           t

    val change_exn : t ->
           'a Key.t ->
           ('a data -> 'a data) -> t

    module Packed: sig .. end

    val to_alist : t -> Packed.t list

    val sexp_of_t : t -> Sexplib.Sexp.t