sig
  type char_seq = string
  type int_seq = int list
  type 'a item = { header : string; sequence : 'a; }
  module Tags :
    sig
      type t = {
        forbid_empty_lines : bool;
        only_header_comment : bool;
        sharp_comments : bool;
        semicolon_comments : bool;
        max_items_per_line : int option;
        sequence : [ `char_sequence of char list option | `int_sequence ];
      }
      val char_sequence_default : Biocaml_fasta.Tags.t
      val int_sequence_default : Biocaml_fasta.Tags.t
      val is_char_sequence : Biocaml_fasta.Tags.t -> bool
      val is_int_sequence : Biocaml_fasta.Tags.t -> bool
      val to_string : Biocaml_fasta.Tags.t -> string
      val of_string :
        string ->
        (Biocaml_fasta.Tags.t, [> `tags_of_string of exn ]) Core.Result.t
      val t_of_sexp : Sexplib.Sexp.t -> Biocaml_fasta.Tags.t
      val sexp_of_t : Biocaml_fasta.Tags.t -> Sexplib.Sexp.t
    end
  module Error :
    sig
      type string_to_raw_item =
          [ `empty_line of Biocaml_pos.t
          | `incomplete_input of Biocaml_pos.t * string list * string option
          | `malformed_partial_sequence of Biocaml_pos.t * string
          | `sequence_is_too_long of Biocaml_pos.t * string ]
      type t =
          [ `empty_line of Biocaml_pos.t
          | `incomplete_input of Biocaml_pos.t * string list * string option
          | `malformed_partial_sequence of Biocaml_pos.t * string
          | `sequence_is_too_long of Biocaml_pos.t * string
          | `unnamed_char_seq of Biocaml_fasta.char_seq
          | `unnamed_int_seq of Biocaml_fasta.int_seq ]
      val sexp_of_string_to_raw_item :
        Biocaml_fasta.Error.string_to_raw_item -> Sexplib.Sexp.t
      val string_to_raw_item_of_sexp :
        Sexplib.Sexp.t -> Biocaml_fasta.Error.string_to_raw_item
      val sexp_of_t : Biocaml_fasta.Error.t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> Biocaml_fasta.Error.t
    end
  exception Error of Biocaml_fasta.Error.t
  val in_channel_to_char_seq_item_stream :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    (Biocaml_fasta.char_seq Biocaml_fasta.item, [> Biocaml_fasta.Error.t ])
    Core.Result.t Stream.t
  val in_channel_to_int_seq_item_stream :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    (Biocaml_fasta.int_seq Biocaml_fasta.item, [> Biocaml_fasta.Error.t ])
    Core.Result.t Stream.t
  val in_channel_to_char_seq_item_stream_exn :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    Biocaml_fasta.char_seq Biocaml_fasta.item Stream.t
  val in_channel_to_int_seq_item_stream_exn :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    Biocaml_fasta.int_seq Biocaml_fasta.item Stream.t
  type 'a raw_item =
      [ `comment of string | `header of string | `partial_sequence of 'a ]
  val in_channel_to_char_seq_raw_item_stream :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    (Biocaml_fasta.char_seq Biocaml_fasta.raw_item,
     [> Biocaml_fasta.Error.t ])
    Core.Result.t Stream.t
  val in_channel_to_int_seq_raw_item_stream :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    (Biocaml_fasta.int_seq Biocaml_fasta.raw_item,
     [> Biocaml_fasta.Error.t ])
    Core.Result.t Stream.t
  val in_channel_to_char_seq_raw_item_stream_exn :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    Biocaml_fasta.char_seq Biocaml_fasta.raw_item Stream.t
  val in_channel_to_int_seq_raw_item_stream_exn :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Biocaml_fasta.Tags.t ->
    Pervasives.in_channel ->
    Biocaml_fasta.int_seq Biocaml_fasta.raw_item Stream.t
  val char_seq_raw_item_to_string :
    Biocaml_fasta.char_seq Biocaml_fasta.raw_item -> string
  val int_seq_raw_item_to_string :
    Biocaml_fasta.int_seq Biocaml_fasta.raw_item -> string
  module Transform :
    sig
      val string_to_char_seq_raw_item :
        ?filename:string ->
        ?tags:Biocaml_fasta.Tags.t ->
        unit ->
        (string,
         (Biocaml_fasta.char_seq Biocaml_fasta.raw_item,
          [> Biocaml_fasta.Error.t ])
         Core.Result.t)
        Biocaml_transform.t
      val char_seq_raw_item_to_item :
        unit ->
        (Biocaml_fasta.char_seq Biocaml_fasta.raw_item,
         (Biocaml_fasta.char_seq Biocaml_fasta.item,
          [> `unnamed_char_seq of Biocaml_fasta.char_seq ])
         Core.Result.t)
        Biocaml_transform.t
      val char_seq_item_to_raw_item :
        ?tags:Biocaml_fasta.Tags.t ->
        unit ->
        (Biocaml_fasta.char_seq Biocaml_fasta.item,
         Biocaml_fasta.char_seq Biocaml_fasta.raw_item)
        Biocaml_transform.t
      val char_seq_raw_item_to_string :
        ?tags:Biocaml_fasta.Tags.t ->
        unit ->
        (Biocaml_fasta.char_seq Biocaml_fasta.raw_item, string)
        Biocaml_transform.t
      val string_to_int_seq_raw_item :
        ?filename:string ->
        ?tags:Biocaml_fasta.Tags.t ->
        unit ->
        (string,
         (Biocaml_fasta.int_seq Biocaml_fasta.raw_item,
          [> Biocaml_fasta.Error.t ])
         Core.Result.t)
        Biocaml_transform.t
      val int_seq_raw_item_to_item :
        unit ->
        (Biocaml_fasta.int_seq Biocaml_fasta.raw_item,
         (Biocaml_fasta.int_seq Biocaml_fasta.item,
          [> `unnamed_int_seq of Biocaml_fasta.int_seq ])
         Core.Result.t)
        Biocaml_transform.t
      val int_seq_item_to_raw_item :
        ?tags:Biocaml_fasta.Tags.t ->
        unit ->
        (Biocaml_fasta.int_seq Biocaml_fasta.item,
         Biocaml_fasta.int_seq Biocaml_fasta.raw_item)
        Biocaml_transform.t
      val int_seq_raw_item_to_string :
        ?tags:Biocaml_fasta.Tags.t ->
        unit ->
        (Biocaml_fasta.int_seq Biocaml_fasta.raw_item, string)
        Biocaml_transform.t
    end
  module Random :
    sig
      type specification =
          [ `non_sequence_probability of float
          | `tags of Biocaml_fasta.Tags.t ]
      val specification_of_string :
        string ->
        (Biocaml_fasta.Random.specification list,
         [> `fasta of [> `parse_specification of exn ] ])
        Core.Std.Result.t
      val get_tags :
        [> Biocaml_fasta.Random.specification ] list ->
        Biocaml_fasta.Tags.t option
      val unit_to_random_char_seq_raw_item :
        [> Biocaml_fasta.Random.specification ] list ->
        ((unit, Biocaml_fasta.char_seq Biocaml_fasta.raw_item)
         Biocaml_transform.t, [> `inconsistent_tags of [> `int_sequence ] ])
        Core.Result.t
    end
  val sexp_of_char_seq : Biocaml_fasta.char_seq -> Sexplib.Sexp.t
  val char_seq_of_sexp : Sexplib.Sexp.t -> Biocaml_fasta.char_seq
  val sexp_of_int_seq : Biocaml_fasta.int_seq -> Sexplib.Sexp.t
  val int_seq_of_sexp : Sexplib.Sexp.t -> Biocaml_fasta.int_seq
  val sexp_of_item :
    ('-> Sexplib.Sexp.t) -> 'Biocaml_fasta.item -> Sexplib.Sexp.t
  val item_of_sexp :
    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'Biocaml_fasta.item
  val sexp_of_raw_item :
    ('-> Sexplib.Sexp.t) -> 'Biocaml_fasta.raw_item -> Sexplib.Sexp.t
  val raw_item_of_sexp :
    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'Biocaml_fasta.raw_item
end