(** {1 A backtrackable hashtable} *) module type S = sig type key type 'a t val create : ?size:int -> unit -> 'a t val find : 'a t -> key -> 'a (** @raise Not_found if the key is not present *) val get : 'a t -> key -> 'a option val mem : _ t -> key -> bool val length : _ t -> int val iter : (key -> 'a -> unit) -> 'a t -> unit val to_iter : 'a t -> (key * 'a) Iter.t val add : 'a t -> key -> 'a -> unit val remove : _ t -> key -> unit val push_level : _ t -> unit val pop_levels : _ t -> int -> unit end module type ARG = sig type t val equal : t -> t -> bool val hash : t -> int end module Make(A : ARG) : S with type key = A.t