sig
  type item = {
    name : string;
    sequence : string;
    comment : string;
    qualities : string;
  }
  module Error :
    sig
      type t =
          [ `incomplete_input of Biocaml_pos.t * string list * string option
          | `sequence_and_qualities_do_not_match of
              Biocaml_pos.t * string * string
          | `wrong_comment_line of Biocaml_pos.t * string
          | `wrong_name_line of Biocaml_pos.t * string ]
      val t_to_string : Biocaml_fastq.Error.t -> string
      val t_of_sexp : Sexplib.Sexp.t -> Biocaml_fastq.Error.t
      val t_of_sexp__ : Sexplib.Sexp.t -> Biocaml_fastq.Error.t
      val sexp_of_t : Biocaml_fastq.Error.t -> Sexplib.Sexp.t
    end
  val in_channel_to_item_stream :
    ?buffer_size:int ->
    ?filename:string ->
    Pervasives.in_channel ->
    (Biocaml_fastq.item, Biocaml_fastq.Error.t) Core.Result.t Stream.t
  module Exceptionful :
    sig
      exception Error of Biocaml_fastq.Error.t
      val in_channel_to_item_stream :
        ?buffer_size:int ->
        ?filename:string ->
        Pervasives.in_channel -> Biocaml_fastq.item Stream.t
    end
  module Transform :
    sig
      val string_to_item :
        ?filename:string ->
        unit ->
        (string,
         (Biocaml_fastq.item, [> Biocaml_fastq.Error.t ]) Core.Result.t)
        Biocaml_transform.t
      val item_to_string :
        unit -> (Biocaml_fastq.item, string) Biocaml_transform.t
      val trim :
        [ `beginning of int | `ending of int ] ->
        (Biocaml_fastq.item,
         (Biocaml_fastq.item, [> `invalid_size of int ]) Core.Result.t)
        Biocaml_transform.t
    end
  val item_of_sexp : Sexplib.Sexp.t -> Biocaml_fastq.item
  val sexp_of_item : Biocaml_fastq.item -> Sexplib.Sexp.t
end