sig
  type comment = [ `comment of string ]
  type variable_step =
      [ `variable_step_state_change of string * int option
      | `variable_step_value of int * float ]
  type fixed_step =
      [ `fixed_step_state_change of string * int * int * int option
      | `fixed_step_value of float ]
  type bed_graph_value = string * int * int * float
  type item =
      [ `bed_graph_value of bed_graph_value
      | `comment of string
      | `fixed_step_state_change of string * int * int * int option
      | `fixed_step_value of float
      | `variable_step_state_change of string * int option
      | `variable_step_value of int * float ]
  module Error :
    sig
      type parsing =
          [ `cannot_parse_key_values of Biocaml_internal_utils.Pos.t * string
          | `empty_line of Biocaml_internal_utils.Pos.t
          | `incomplete_input of
              Biocaml_internal_utils.Pos.t * string list * string option
          | `missing_chrom_value of Biocaml_internal_utils.Pos.t * string
          | `missing_start_value of Biocaml_internal_utils.Pos.t * string
          | `missing_step_value of Biocaml_internal_utils.Pos.t * string
          | `unrecognizable_line of
              Biocaml_internal_utils.Pos.t * string list
          | `wrong_bed_graph_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_fixed_step_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_span_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_start_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_step_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_variable_step_value of
              Biocaml_internal_utils.Pos.t * string ]
      val parsing_error_to_string : parsing -> string
      type to_bed_graph =
          [ `not_in_fixed_step_state | `not_in_variable_step_state ]
      type t =
          [ `cannot_parse_key_values of Biocaml_internal_utils.Pos.t * string
          | `empty_line of Biocaml_internal_utils.Pos.t
          | `incomplete_input of
              Biocaml_internal_utils.Pos.t * string list * string option
          | `missing_chrom_value of Biocaml_internal_utils.Pos.t * string
          | `missing_start_value of Biocaml_internal_utils.Pos.t * string
          | `missing_step_value of Biocaml_internal_utils.Pos.t * string
          | `not_in_fixed_step_state
          | `not_in_variable_step_state
          | `unrecognizable_line of
              Biocaml_internal_utils.Pos.t * string list
          | `wrong_bed_graph_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_fixed_step_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_span_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_start_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_step_value of Biocaml_internal_utils.Pos.t * string
          | `wrong_variable_step_value of
              Biocaml_internal_utils.Pos.t * string ]
      val parsing_of_sexp : Sexplib.Sexp.t -> parsing
      val sexp_of_parsing : parsing -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val to_bed_graph_of_sexp : Sexplib.Sexp.t -> to_bed_graph
      val sexp_of_to_bed_graph : to_bed_graph -> Sexplib.Sexp.t
    end
  module Tags :
    sig
      type t =
        Biocaml_wig.Tags.t = {
        allow_empty_lines : bool;
        sharp_comments : bool;
      }
      val default : t
      val of_string :
        string ->
        (t, [> `wig of [> `tags_of_string of exn ] ])
        Biocaml_internal_utils.Result.t
      val to_string : t -> string
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  exception Error of Error.t
  val in_channel_to_item_stream :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Tags.t ->
    in_channel ->
    (item, Error.t) Biocaml_internal_utils.Result.t
    Biocaml_internal_utils.Stream.t
  val in_channel_to_item_stream_exn :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Tags.t -> in_channel -> item Biocaml_internal_utils.Stream.t
  val in_channel_to_bed_graph :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Tags.t ->
    in_channel ->
    (bed_graph_value, Error.t) Biocaml_internal_utils.Result.t
    Biocaml_internal_utils.Stream.t
  val in_channel_to_bed_graph_exn :
    ?buffer_size:int ->
    ?filename:string ->
    ?tags:Tags.t ->
    in_channel -> bed_graph_value Biocaml_internal_utils.Stream.t
  val item_to_string : ?tags:Tags.t -> item -> string
  module Transform :
    sig
      val string_to_item :
        ?filename:string ->
        ?tags:Tags.t ->
        unit ->
        (string, (item, [> Error.parsing ]) Biocaml_internal_utils.Result.t)
        Biocaml_transform.t
      val item_to_string :
        ?tags:Tags.t -> unit -> (item, string) Biocaml_transform.t
      val item_to_bed_graph :
        unit ->
        (item,
         (bed_graph_value, [> Error.to_bed_graph ])
         Biocaml_internal_utils.Result.t)
        Biocaml_transform.t
    end
  val comment_of_sexp : Sexplib.Sexp.t -> comment
  val sexp_of_comment : comment -> Sexplib.Sexp.t
  val variable_step_of_sexp : Sexplib.Sexp.t -> variable_step
  val sexp_of_variable_step : variable_step -> Sexplib.Sexp.t
  val fixed_step_of_sexp : Sexplib.Sexp.t -> fixed_step
  val sexp_of_fixed_step : fixed_step -> Sexplib.Sexp.t
  val bed_graph_value_of_sexp : Sexplib.Sexp.t -> bed_graph_value
  val sexp_of_bed_graph_value : bed_graph_value -> Sexplib.Sexp.t
  val item_of_sexp : Sexplib.Sexp.t -> item
  val sexp_of_item : item -> Sexplib.Sexp.t
end