module type S = sig type elt type 'a node = Nil | Cons of elt * 'a type t val hash : t -> int val uid : t -> int val equal : t -> t -> bool val nil : t val node : t -> t node val cons : 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 end module Make (H : Hcons.S) : S with type elt = H.t