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 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
end