Shape.UidA Uid.t is associated to every declaration in signatures and implementations. They uniquely identify bindings in the program. When associated with these bindings' locations they are useful to external tools when trying to jump to an identifier's declaration or definition. They are stored to that effect in the uid_to_decl table of cmt files.
type t = private | Compilation_unit of string| Item of {comp_unit : string;id : int;from : Unit_info.intf_or_impl;}| Local_opaque_item of {}"Local_opaque_item" is used to give uids to usages of values of which the definition is not known statically. This notably happens when accessing first-class modules' items or usages of a functor parameter's items inside the body of the functor itself. Having Uids synthesized for these usages is useful for tools that provides occurrences and renaming features.
*)| Internal| Predef of stringval mk : current_unit:Unit_info.t option -> tval mk_local_opaque : current_unit:Unit_info.t option -> tval internal_not_actually_unique : tval for_actual_declaration : t -> boolinclude Identifiable.S with type t := tmodule T : Identifiable.Thing with type t = tinclude Identifiable.Thing with type t := T.tinclude Hashtbl.HashedType with type t := T.tval hash : T.t -> intA hashing function on keys. It must be such that if two keys are equal according to equal, then they have identical hash values as computed by hash.
The hash value of a key should remain constant as long as the key is in the table. In particular, if the hash function depends on mutable key data, then that data must not be mutated while the key is in the table. Similarly, as the hash function may be called while the table itself is being modified, it should avoid accessing the table as part of its computation.
Examples: suitable (equal, hash) pairs for arbitrary key types include
(=), hash) for comparing objects by structure (provided objects do not contain floats)(fun x y -> compare x y = 0), hash) for comparing objects by structure and handling Stdlib.nan correctly(==), hash) for comparing objects by physical equality (e.g. for mutable or cyclic objects).include Map.OrderedType with type t := T.tA total ordering function over the keys. This is a two-argument function f such that f e1 e2 is zero if the keys e1 and e2 are equal, f e1 e2 is strictly negative if e1 is smaller than e2, and f e1 e2 is strictly positive if e1 is greater than e2. Example: a suitable ordering function is the generic structural comparison function Stdlib.compare.
val output : out_channel -> T.t -> unitval print : Format.formatter -> T.t -> unitmodule Set : Identifiable.Set with module T := Tmodule Map : Identifiable.Map with module T := Tmodule Tbl : Identifiable.Tbl with module T := Tmodule Deps : sig ... end