sig
  type vcf_id = string
  type vcf_description = string
  type vcf_number = Number of int | OnePerAllele | OnePerGenotype | Unknown
  type vcf_format_type =
      [ `character_value | `float_value | `integer_value | `string_value ]
  type vcf_info_type =
      [ `character_value
      | `flag_value
      | `float_value
      | `integer_value
      | `string_value ]
  type vcf_info_meta =
      Info of Biocaml_vcf.vcf_number * Biocaml_vcf.vcf_info_type *
        Biocaml_vcf.vcf_description
  type vcf_filter_meta = Filter of Biocaml_vcf.vcf_description
  type vcf_format_meta =
      Format of Biocaml_vcf.vcf_number * Biocaml_vcf.vcf_format_type *
        Biocaml_vcf.vcf_description
  type vcf_alt_meta = Alt of Biocaml_vcf.vcf_description
  type vcf_meta = {
    vcfm_version : string;
    vcfm_id_cache : Biocaml_vcf.vcf_id Biocaml_internal_pervasives.Set.Poly.t;
    vcfm_info :
      (Biocaml_vcf.vcf_id, Biocaml_vcf.vcf_info_meta)
      Biocaml_internal_pervasives.Hashtbl.t;
    vcfm_filters : (Biocaml_vcf.vcf_id * Biocaml_vcf.vcf_filter_meta) list;
    vcfm_format :
      (Biocaml_vcf.vcf_id, Biocaml_vcf.vcf_format_meta)
      Biocaml_internal_pervasives.Hashtbl.t;
    vcfm_alt :
      (string, Biocaml_vcf.vcf_alt_meta)
      Biocaml_internal_pervasives.Hashtbl.t;
    vcfm_arbitrary : (string, string) Biocaml_internal_pervasives.Hashtbl.t;
    vcfm_header : string list;
    vcfm_samples : string list;
  }
  type vcf_format =
      [ `character of char
      | `float of float
      | `integer of int
      | `missing
      | `string of string ]
  type vcf_info =
      [ `character of char
      | `flag of string
      | `float of float
      | `integer of int
      | `missing
      | `string of string ]
  type vcf_row = {
    vcfr_chrom : string;
    vcfr_pos : int;
    vcfr_ids : string list;
    vcfr_ref : string;
    vcfr_alts : string list;
    vcfr_qual : float option;
    vcfr_filter : Biocaml_vcf.vcf_id list;
    vcfr_info :
      (Biocaml_vcf.vcf_id, Biocaml_vcf.vcf_info list)
      Biocaml_internal_pervasives.Hashtbl.t;
    vcfr_samples :
      (Biocaml_vcf.vcf_id,
       (Biocaml_vcf.vcf_id * Biocaml_vcf.vcf_format list) list)
      Biocaml_internal_pervasives.Hashtbl.t;
  }
  type item = Biocaml_vcf.vcf_row
  module Pos :
    sig
      type t = private {
        file : string option;
        line : int option;
        col : int option;
      }
      exception Bad of string
      exception Undefined
      val make : ?file:string -> ?line:int -> ?col:int -> unit -> t
      val f : string -> t
      val l : int -> t
      val fl : string -> int -> t
      val lc : int -> int -> t
      val flc : string -> int -> int -> t
      val unknown : t
      val file_exn : t -> string
      val line_exn : t -> int
      val col_exn : t -> int
      val set_file : t -> string -> t
      val set_line : t -> int -> t
      val set_col : t -> int -> t
      val incrl : t -> int -> t
      val to_string : t -> string
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  type vcf_parse_row_error =
      [ `duplicate_ids of Biocaml_vcf.vcf_id list
      | `format_type_coersion_failure of Biocaml_vcf.vcf_format_type * string
      | `info_type_coersion_failure of Biocaml_vcf.vcf_info_type * string
      | `invalid_arguments_length of Biocaml_vcf.vcf_id * int * int
      | `invalid_dna of string
      | `invalid_float of string
      | `invalid_int of string
      | `invalid_row_length of int * int
      | `malformed_sample of string
      | `unknown_alt of string
      | `unknown_filter of Biocaml_vcf.vcf_id
      | `unknown_format of Biocaml_vcf.vcf_id
      | `unknown_info of Biocaml_vcf.vcf_id ]
  type vcf_parse_error =
      [ `incomplete_input of Biocaml_vcf.Pos.t * string list * string option
      | `malformed_header of Biocaml_vcf.Pos.t * string
      | `malformed_meta of Biocaml_vcf.Pos.t * string
      | `malformed_row of
          Biocaml_vcf.Pos.t * Biocaml_vcf.vcf_parse_row_error * string
      | `not_ready ]
  val parse_error_to_string : Biocaml_vcf.vcf_parse_error -> string
  module Transform :
    sig
      val string_to_item :
        ?filename:string ->
        unit ->
        (string,
         (Biocaml_vcf.item, Biocaml_vcf.vcf_parse_error) Core.Result.t)
        Biocaml_transform.t
    end
end