Core_kernel.Univ_map
module type S = sig ... end
module type S1 = sig ... end
module type Key = sig ... end
module type Data = sig ... end
module Type_id_key : Key with type 'a t = 'a Type_equal.Id.t
include S with type 'a data = 'a and module Key := Type_id_key
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
include Base.Invariant.S with type t := t
val invariant : t -> unit
val empty : t
val is_empty : t -> Base.Bool.t
val set : t -> 'a Type_id_key.t -> 'a data -> t
val mem : t -> 'a Type_id_key.t -> Base.Bool.t
val mem_by_id : t -> Type_equal.Id.Uid.t -> Base.Bool.t
val find : t -> 'a Type_id_key.t -> 'a data Base.Option.t
val find_exn : t -> 'a Type_id_key.t -> 'a data
val add : t -> 'a Type_id_key.t -> 'a data -> [ `Ok of t | `Duplicate ]
val add_exn : t -> 'a Type_id_key.t -> 'a data -> t
val change : t -> 'a Type_id_key.t -> f:('a data Base.Option.t -> 'a data Base.Option.t) -> t
val change_exn : t -> 'a Type_id_key.t -> f:('a data -> 'a data) -> t
val update : t -> 'a Type_id_key.t -> f:('a data Base.Option.t -> 'a data) -> t
val remove : t -> 'a Type_id_key.t -> t
val remove_by_id : t -> Type_equal.Id.Uid.t -> t
module Packed : sig ... end
val to_alist : t -> Packed.t Base.List.t
val of_alist_exn : Packed.t Base.List.t -> t
module Key = Type_equal.Id
This binding is convenient because existing call sites often refer to Univ_map.Key.create
.
module Merge (Key : Key) (Input1_data : sig ... end) (Input2_data : sig ... end) (Output_data : sig ... end) : sig ... end
module With_default : sig ... end
keys with associated default values, so that find
is no longer partial
module With_fold : sig ... end
keys that map to an accumulator value with an associated fold operation
module Multi : sig ... end
list-accumulating keys with a default value of the empty list