Module type Hash_gen.S

type key;
type t('a);
let create: int => t('a);
let clear: t('a) => unit;
let reset: t('a) => unit;
let add: t('a) => key => 'a => unit;
let add_or_update: t('a) => key => update:('a => 'a) => 'a => unit;
let remove: t('a) => key => unit;
let find_exn: t('a) => key => 'a;
let find_all: t('a) => key => list('a);
let find_opt: t('a) => key => option('a);
let find_key_opt: t('a) => key => option(key);

return the key found in the hashtbl. Use case: when you find the key existed in hashtbl, you want to use the one stored in the hashtbl. (they are semantically equivlanent, but may have other information different)

let find_default: t('a) => key => 'a => 'a;
let replace: t('a) => key => 'a => unit;
let mem: t('a) => key => bool;
let iter: t('a) => (key => 'a => unit) => unit;
let fold: t('a) => 'b => (key => 'a => 'b => 'b) => 'b;
let length: t('a) => int;
let to_list: t('a) => (key => 'a => 'c) => list('c);
let of_list2: list(key) => list('a) => t('a);