module type S = sig type elt type 'a node = Nil | Cons of elt * 'a module rec Node : sig include Hcons.S with type data = Data.t end and Data : sig include Hashtbl.HashedType with type t = Node.t node end type data = Data.t type t = Node.t val hash : t -> int val uid : t -> Uid.t val make : data -> t val equal : t -> t -> bool val nil : t val node : t -> t node val cons : ?sorted:bool -> elt -> t -> t val hd : t -> elt val tl : t -> t val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a val map : (elt -> elt) -> t -> t val iter : (elt -> 'a) -> t -> unit val rev : t -> t val rev_map : (elt -> elt) -> t -> t val length : t -> int val mem : elt -> t -> bool val stats : unit -> unit val init : unit -> unit end module Make (H : Hcons.SA) : S with type elt = H.t