module Pure : sig type t = V of int | A of t * t | L of t | B val print : ?l:string list -> t -> string val lift : int -> t -> t val unwind : ?tbl:('a list * t * 'a list as 'a, t) Hashtbl.t -> 'a -> t val mwhd : (('a * t * ('b list as 'c) as 'b) list as 'a) * t * 'c -> t end module Scott : sig val mk_n : int -> Pure.t val dummy : Pure.t val mk_match : Pure.t -> (int * Pure.t) list -> Pure.t end