`type key`

type of objects in the table

`type t`

type of the table

`val create : int -> t`

`create n` creates a table with at least `n` cells.

`val clear : t -> unit`

`clear tab` removes all entries from the table `tab`.

`val hashcons : t -> key -> key hobj`

`hashcons tab k` returns either `k`, adding it to the table `tab` as a side effect, or if `k` is already in the table then it returns the hashed object corresponding to that entry.

- raises `Failure`

  if number of objects with the same hash reaches system limit of array size

`val iter : (key hobj -> unit) -> t -> unit`

`iter f tab` applies `f` to every live hashed object in the table `tab`.

`val fold : (key hobj -> 'a -> 'a) -> t -> 'a -> 'a`

`fold f tab x0` folds `f` across every live hashed object in the table `tab`, starting with value `x0`

`val count : t -> int`

`count tab` returns a count of how many live objects are in `tab`. This can decrease whenever the GC runs, even during execution, so consider the returned value as an upper-bound.