sig
  type raw_alignment = {
    qname : string;
    flag : int;
    ref_id : int;
    pos : int;
    mapq : int;
    bin : int;
    cigar : string;
    next_ref_id : int;
    pnext : int;
    tlen : int;
    seq : string;
    qual : int array;
    optional : string;
  }
  type raw_item =
      [ `alignment of Biocaml_bam.raw_alignment
      | `header of string
      | `reference_information of (string * int) array ]
  module Error :
    sig
      type raw_bam =
          [ `read_name_not_null_terminated of string
          | `reference_information_name_not_null_terminated of string
          | `reference_information_overflow of int * string
          | `wrong_int32 of string
          | `wrong_magic_number of string ]
      type parse_optional =
          [ `wrong_auxiliary_data of
              [ `array_size of int
              | `null_terminated_hexarray
              | `null_terminated_string
              | `out_of_bounds
              | `unknown_type of char
              | `wrong_int32 of string ] * string ]
      type parse_cigar =
          [ `wrong_cigar of string | `wrong_cigar_length of int ]
      type raw_to_item =
          [ `header_line_not_first of int
          | `header_line_without_version of (string * string) list
          | `header_line_wrong_sorting of string
          | `invalid_header_tag of int * string
          | `invalid_tag_value_list of int * string list
          | `reference_sequence_not_found of Biocaml_bam.raw_alignment
          | `wrong_auxiliary_data of
              [ `array_size of int
              | `null_terminated_hexarray
              | `null_terminated_string
              | `out_of_bounds
              | `unknown_type of char
              | `wrong_int32 of string ] * string
          | `wrong_cigar of string
          | `wrong_cigar_length of int
          | `wrong_flag of Biocaml_bam.raw_alignment
          | `wrong_mapq of Biocaml_bam.raw_alignment
          | `wrong_pnext of Biocaml_bam.raw_alignment
          | `wrong_pos of Biocaml_bam.raw_alignment
          | `wrong_qname of Biocaml_bam.raw_alignment
          | `wrong_tlen of Biocaml_bam.raw_alignment ]
      type item_to_raw =
          [ `cannot_get_sequence of Biocaml_sam_deprecated.alignment
          | `header_item_not_first of string
          | `reference_name_not_found of
              Biocaml_sam_deprecated.alignment * string ]
      type t =
          [ `cannot_get_sequence of Biocaml_sam_deprecated.alignment
          | `header_item_not_first of string
          | `header_line_not_first of int
          | `header_line_without_version of (string * string) list
          | `header_line_wrong_sorting of string
          | `invalid_header_tag of int * string
          | `invalid_tag_value_list of int * string list
          | `read_name_not_null_terminated of string
          | `reference_information_name_not_null_terminated of string
          | `reference_information_overflow of int * string
          | `reference_name_not_found of
              Biocaml_sam_deprecated.alignment * string
          | `reference_sequence_not_found of Biocaml_bam.raw_alignment
          | `wrong_auxiliary_data of
              [ `array_size of int
              | `null_terminated_hexarray
              | `null_terminated_string
              | `out_of_bounds
              | `unknown_type of char
              | `wrong_int32 of string ] * string
          | `wrong_cigar of string
          | `wrong_cigar_length of int
          | `wrong_flag of Biocaml_bam.raw_alignment
          | `wrong_int32 of string
          | `wrong_magic_number of string
          | `wrong_mapq of Biocaml_bam.raw_alignment
          | `wrong_pnext of Biocaml_bam.raw_alignment
          | `wrong_pos of Biocaml_bam.raw_alignment
          | `wrong_qname of Biocaml_bam.raw_alignment
          | `wrong_tlen of Biocaml_bam.raw_alignment ]
      val raw_bam_of_sexp : Sexplib.Sexp.t -> Biocaml_bam.Error.raw_bam
      val sexp_of_raw_bam : Biocaml_bam.Error.raw_bam -> Sexplib.Sexp.t
      val parse_optional_of_sexp :
        Sexplib.Sexp.t -> Biocaml_bam.Error.parse_optional
      val sexp_of_parse_optional :
        Biocaml_bam.Error.parse_optional -> Sexplib.Sexp.t
      val parse_cigar_of_sexp :
        Sexplib.Sexp.t -> Biocaml_bam.Error.parse_cigar
      val sexp_of_parse_cigar :
        Biocaml_bam.Error.parse_cigar -> Sexplib.Sexp.t
      val raw_to_item_of_sexp :
        Sexplib.Sexp.t -> Biocaml_bam.Error.raw_to_item
      val sexp_of_raw_to_item :
        Biocaml_bam.Error.raw_to_item -> Sexplib.Sexp.t
      val item_to_raw_of_sexp :
        Sexplib.Sexp.t -> Biocaml_bam.Error.item_to_raw
      val sexp_of_item_to_raw :
        Biocaml_bam.Error.item_to_raw -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> Biocaml_bam.Error.t
      val sexp_of_t : Biocaml_bam.Error.t -> Sexplib.Sexp.t
    end
  exception Error of
              [ `bam of Biocaml_bam.Error.t
              | `unzip of Biocaml_zip.Error.unzip ]
  val in_channel_to_raw_item_stream :
    ?zlib_buffer_size:int ->
    ?buffer_size:int ->
    Pervasives.in_channel ->
    (Biocaml_bam.raw_item,
     [> `bam of [> Biocaml_bam.Error.raw_bam ]
      | `unzip of [> Biocaml_zip.Error.unzip ] ])
    Core.Std.Result.t Stream.t
  val in_channel_to_raw_item_stream_exn :
    ?zlib_buffer_size:int ->
    ?buffer_size:int ->
    Pervasives.in_channel -> Biocaml_bam.raw_item Stream.t
  val in_channel_to_item_stream :
    ?zlib_buffer_size:int ->
    ?buffer_size:int ->
    Pervasives.in_channel ->
    (Biocaml_sam_deprecated.item,
     [> `bam of [> Biocaml_bam.Error.t ]
      | `unzip of [> Biocaml_zip.Error.unzip ] ])
    Core.Std.Result.t Stream.t
  val in_channel_to_item_stream_exn :
    ?zlib_buffer_size:int ->
    ?buffer_size:int ->
    Pervasives.in_channel -> Biocaml_sam_deprecated.item Stream.t
  module Transform :
    sig
      val raw_to_item :
        unit ->
        (Biocaml_bam.raw_item,
         (Biocaml_sam_deprecated.item, [> Biocaml_bam.Error.raw_to_item ])
         Core.Std.Result.t)
        Biocaml_transform.t
      val string_to_raw :
        ?zlib_buffer_size:int ->
        unit ->
        (string,
         (Biocaml_bam.raw_item,
          [> `bam of Biocaml_bam.Error.raw_bam
           | `unzip of Biocaml_zip.Error.unzip ])
         Core.Std.Result.t)
        Biocaml_transform.t
      val item_to_raw :
        unit ->
        (Biocaml_sam_deprecated.item,
         (Biocaml_bam.raw_item, [> Biocaml_bam.Error.item_to_raw ])
         Core.Std.Result.t)
        Biocaml_transform.t
      val raw_to_string :
        ?gzip_level:int ->
        ?zlib_buffer_size:int ->
        unit -> (Biocaml_bam.raw_item, string) Biocaml_transform.t
    end
  val parse_cigar :
    ?pos:int ->
    ?len:int ->
    string ->
    (Biocaml_sam_deprecated.cigar_op array,
     [> Biocaml_bam.Error.parse_cigar ])
    Core.Std.Result.t
  val parse_optional :
    ?pos:int ->
    ?len:int ->
    string ->
    (Biocaml_sam_deprecated.optional_content,
     [> Biocaml_bam.Error.parse_optional ])
    Core.Std.Result.t
  val raw_alignment_of_sexp : Sexplib.Sexp.t -> Biocaml_bam.raw_alignment
  val sexp_of_raw_alignment : Biocaml_bam.raw_alignment -> Sexplib.Sexp.t
  val raw_item_of_sexp : Sexplib.Sexp.t -> Biocaml_bam.raw_item
  val sexp_of_raw_item : Biocaml_bam.raw_item -> Sexplib.Sexp.t
end