(* Identifiers (unique names) *) type t val new: string -> t val new_persistent: string -> t val name: t -> string val unique_name: t -> string val persistent: t -> bool val equal: t -> t -> bool (* Compare identifiers by name. *) val same: t -> t -> bool (* Compare identifiers by binding location. Two identifiers are the same either if they are both non-persistent and have been created by the same call to [new], or if they are both persistent and have the same name. *) val identify: t -> t -> (unit -> 'a) -> 'a (* [identify id1 id2 f] temporarily makes [id1] and [id2] the same during the evaluation of [f ()]. *) val hide: t -> t (* Return an identifier with same name as the given identifier, but stamp different from any stamp returns by new. When put in a 'a tbl, this identifier can only be looked up by name. *) val make_global: t -> unit val global: t -> bool val print: t -> unit type 'a tbl (* Association tables from identifiers to type 'a. *) val empty: 'a tbl val add: t -> 'a -> 'a tbl -> 'a tbl val find_same: t -> 'a tbl -> 'a val find_name: string -> 'a tbl -> 'a val print_tbl: ('a -> unit) -> 'a tbl -> unit