Module Type_equal.Id
Id
provides identifiers for types, and the ability to test (via Id.same
) at runtime if two identifiers are equal, and if so to get a proof of equality of their types. Unlike values of type Type_equal.t
, values of type Id.t
do have semantic content and must have a nontrivial runtime representation.
val sexp_of_t : ('a -> Base.Sexp.t) -> 'a t -> Base.Sexp.t
module Uid : sig ... end
Every
Id.t
contains a unique id that is distinct from theUid.t
in any otherId.t
.
val uid : _ t -> Uid.t
val create : name:string -> ('a -> Base.Sexp.t) -> 'a t
create ~name
defines a new type identity. Two calls tocreate
will result in two distinct identifiers, even for the same arguments with the same type. If the type'a
doesn't support sexp conversion, then a good practice is to have the converter be[%sexp_of: _]
, (orsexp_of_opaque
, if not using ppx_sexp_conv).
val hash : _ t -> int
val name : _ t -> string
val to_sexp : 'a t -> 'a -> Base.Sexp.t
val hash_fold_t : Base.Hash.state -> _ t -> Base.Hash.state