sig
  type 'a gen = unit -> 'a option
  type 'a t = < clone : 'GenClone.t; gen : 'GenClone.gen >
  type 'a clonable = 'GenClone.t
  type 'a prependable =
      < clone : 'GenClone.prependable; gen : 'GenClone.gen;
        prepend : '-> unit >
  val to_prependable : 'GenClone.t -> 'GenClone.prependable
  val map : ('-> 'b) -> 'GenClone.t -> 'GenClone.t
  module IO :
    sig
      val with_in :
        ?mode:int ->
        ?flags:Pervasives.open_flag list ->
        string -> (char GenClone.t -> 'a) -> 'a
    end
end