sig
  type 'a t = unit -> 'Seq.node
  and 'a node = Nil | Cons of 'a * 'Seq.t
  val empty : 'Seq.t
  val return : '-> 'Seq.t
  val cons : '-> 'Seq.t -> 'Seq.t
  val append : 'Seq.t -> 'Seq.t -> 'Seq.t
  val map : ('-> 'b) -> 'Seq.t -> 'Seq.t
  val filter : ('-> bool) -> 'Seq.t -> 'Seq.t
  val filter_map : ('-> 'b option) -> 'Seq.t -> 'Seq.t
  val flat_map : ('-> 'Seq.t) -> 'Seq.t -> 'Seq.t
  val fold_left : ('-> '-> 'a) -> '-> 'Seq.t -> 'a
  val iter : ('-> unit) -> 'Seq.t -> unit
  val unfold : ('-> ('a * 'b) option) -> '-> 'Seq.t
end