sig
  type t = {
    seqname : string;
    source : string option;
    feature : string option;
    pos : int * int;
    score : float option;
    strand : [ `minus | `not_applicable | `plus | `unknown ];
    phase : int option;
    attributes : (string * string list) list;
  }
  type stream_item = [ `comment of string | `record of Biocaml_gff.t ]
  type parse_error =
      [ `cannot_parse_float of Biocaml_pos.t * string
      | `cannot_parse_int of Biocaml_pos.t * string
      | `cannot_parse_strand of Biocaml_pos.t * string
      | `cannot_parse_string of Biocaml_pos.t * string
      | `empty_line of Biocaml_pos.t
      | `incomplete_input of Biocaml_pos.t * string list * string option
      | `wrong_attributes of Biocaml_pos.t * string
      | `wrong_row of Biocaml_pos.t * string
      | `wrong_url_escaping of Biocaml_pos.t * string ]
  type tag = [ `pedantic | `version of [ `three | `two ] ]
  val default_tags : Biocaml_gff.tag list
  module Transform :
    sig
      val string_to_item :
        ?filename:string ->
        ?tags:Biocaml_gff.tag list ->
        unit ->
        (string,
         (Biocaml_gff.stream_item, Biocaml_gff.parse_error) Core.Result.t)
        Biocaml_transform.t
      val item_to_string :
        ?tags:Biocaml_gff.tag list ->
        unit -> (Biocaml_gff.stream_item, string) Biocaml_transform.t
    end
  val parse_error_of_sexp : Sexplib.Sexp.t -> Biocaml_gff.parse_error
  val parse_error_of_sexp__ : Sexplib.Sexp.t -> Biocaml_gff.parse_error
  val sexp_of_parse_error : Biocaml_gff.parse_error -> Sexplib.Sexp.t
  val tag_of_sexp : Sexplib.Sexp.t -> Biocaml_gff.tag
  val tag_of_sexp__ : Sexplib.Sexp.t -> Biocaml_gff.tag
  val sexp_of_tag : Biocaml_gff.tag -> Sexplib.Sexp.t
end