sig
  type item = Biocaml_internal_utils.Line.t
  module MakeIO :
    functor (Future : Future.S->
      sig
        val read : Future.Reader.t -> Biocaml_lines.item Future.Pipe.Reader.t
        val write :
          Future.Writer.t ->
          Biocaml_lines.item Future.Pipe.Reader.t -> unit Future.Deferred.t
        val write_file :
          ?perm:int ->
          ?append:bool ->
          string ->
          Biocaml_lines.item Future.Pipe.Reader.t -> unit Future.Deferred.t
      end
  val read : Future_std.Reader.t -> item Future_std.Pipe.Reader.t
  val write :
    Future_std.Writer.t ->
    item Future_std.Pipe.Reader.t -> unit Future_std.Deferred.t
  val write_file :
    ?perm:int ->
    ?append:bool ->
    string -> item Future_std.Pipe.Reader.t -> unit Future_std.Deferred.t
  val of_char_stream :
    char Biocaml_internal_utils.Stream.t ->
    Biocaml_lines.item Biocaml_internal_utils.Stream.t
  val of_channel :
    Pervasives.in_channel ->
    Biocaml_lines.item Biocaml_internal_utils.Stream.t
  val of_string :
    string -> Biocaml_lines.item Biocaml_internal_utils.Stream.t
  val to_channel :
    Biocaml_lines.item Biocaml_internal_utils.Stream.t ->
    Pervasives.out_channel -> unit
  module Buffer :
    sig
      type t
      exception No_next_line
      val make : ?filename:string -> unit -> Biocaml_lines.Buffer.t
      val feed_line : Biocaml_lines.Buffer.t -> Biocaml_lines.item -> unit
      val feed_string : Biocaml_lines.Buffer.t -> string -> unit
      val queued_lines : Biocaml_lines.Buffer.t -> int
      val is_empty : Biocaml_lines.Buffer.t -> bool
      val peek_line : Biocaml_lines.Buffer.t -> Biocaml_lines.item option
      val next_line : Biocaml_lines.Buffer.t -> Biocaml_lines.item option
      val next_line_exn : Biocaml_lines.Buffer.t -> Biocaml_lines.item
      val current_position :
        Biocaml_lines.Buffer.t -> Biocaml_internal_utils.Pos.t
      val contents :
        Biocaml_lines.Buffer.t -> Biocaml_lines.item list * string option
      val empty : Biocaml_lines.Buffer.t -> unit
    end
  module Transform :
    sig
      val string_to_item :
        unit -> (string, Biocaml_lines.item) Biocaml_transform.t
      val group2 :
        unit ->
        (Biocaml_lines.item,
         (Biocaml_lines.item * Biocaml_lines.item,
          [> `premature_end_of_input ])
         Biocaml_internal_utils.Result.t)
        Biocaml_transform.t
      val item_to_string :
        ?buffer:[ `clear of int | `reset of int ] ->
        unit -> (Biocaml_lines.item, string) Biocaml_transform.t
      val make :
        ?name:string ->
        ?filename:string ->
        next:(Biocaml_lines.Buffer.t ->
              [ `not_ready
              | `output of ('b, 'errnext) Biocaml_internal_utils.Result.t ]) ->
        on_error:([ `incomplete_input of
                      Biocaml_internal_utils.Pos.t * string list *
                      string option
                  | `next of 'errnext ] -> 'err) ->
        unit ->
        (string, ('b, 'err) Biocaml_internal_utils.Result.t)
        Biocaml_transform.t
      val make_merge_error :
        ?name:string ->
        ?filename:string ->
        next:(Biocaml_lines.Buffer.t ->
              [ `not_ready
              | `output of
                  ('a,
                   [> `incomplete_input of
                        Biocaml_internal_utils.Pos.t * string list *
                        string option ]
                   as 'b)
                  Biocaml_internal_utils.Result.t ]) ->
        unit ->
        (string, ('a, 'b) Biocaml_internal_utils.Result.t)
        Biocaml_transform.t
    end
  val item_of_sexp : Sexplib.Sexp.t -> Biocaml_lines.item
  val sexp_of_item : Biocaml_lines.item -> Sexplib.Sexp.t
end