module Hashtbl: sig .. end
type t('a, 'b) = Hashtbl.t('a, 'b);
let create: (~random: bool=?, int) => t('a, 'b);
let clear: t('a, 'b) => unit;
let reset: t('a, 'b) => unit;
let copy: t('a, 'b) => t('a, 'b);
let add: (t('a, 'b), ~key: 'a, ~data: 'b) => unit;
let find: (t('a, 'b), 'a) => 'b;
let find_all: (t('a, 'b), 'a) => list('b);
let mem: (t('a, 'b), 'a) => bool;
let remove: (t('a, 'b), 'a) => unit;
let replace: (t('a, 'b), ~key: 'a, ~data: 'b) => unit;
let iter: (~f: (~key: 'a, ~data: 'b) => unit, t('a, 'b)) => unit;
let fold: (~f: (~key: 'a, ~data: 'b, 'c) => 'c, t('a, 'b), ~init: 'c) => 'c;
let length: t('a, 'b) => int;
let randomize: unit => unit;
type statistics = Hashtbl.statistics;
let stats: t('a, 'b) => statistics;
module type HashedType = Hashtbl.HashedType;
module type SeededHashedType = Hashtbl.SeededHashedType;
module type S = sig .. end
module type SeededS = sig .. end
module Make: (H: HashedType) => S with type key = H.t;
module MakeSeeded: (H: SeededHashedType) => SeededS with type key = H.t;
let hash: 'a => int;
let seeded_hash: (int, 'a) => int;
let hash_param: (int, int, 'a) => int;
let seeded_hash_param: (int, int, int, 'a) => int;