type nonrec ('a, 'b) t = ('a, 'a, 'b, 'b list) tval create : ?n:int -> unit -> ('a, 'b) tval add : ('a, 'b) t -> 'a -> 'b -> unitval stream : ('a, 'b) t -> ('a * 'b list) Stream.tval of_stream : ('a * 'b) Stream.t -> ('a, 'b) tval to_alist : ('a, 'b) t -> ('a * 'b list) list