sig
  type ('input, 'output) t
  exception Feeding_stopped_transform of string
  val make :
    ?name:string ->
    feed:('input -> unit) ->
    next:(bool -> [ `end_of_stream | `not_ready | `output of 'output ]) ->
    unit -> ('input, 'output) Biocaml_transform.t
  val feed : ('input, 'output) Biocaml_transform.t -> 'input -> unit
  val next :
    ('input, 'output) Biocaml_transform.t ->
    [ `end_of_stream | `not_ready | `output of 'output ]
  val stop : ('input, 'output) Biocaml_transform.t -> unit
  val name : ('input, 'output) Biocaml_transform.t -> string option
  val identity : ?name:string -> unit -> ('a, 'a) Biocaml_transform.t
  val to_stream_fun :
    ('input, 'output) Biocaml_transform.t ->
    'input Stream.t -> 'output Stream.t
  val in_channel_strings_to_stream :
    ?buffer_size:int ->
    Pervasives.in_channel ->
    (string, 'output) Biocaml_transform.t -> 'output Stream.t
  val on_input :
    ('b, 'c) Biocaml_transform.t ->
    f:('-> 'b) -> ('a, 'c) Biocaml_transform.t
  val on_output :
    ('a, 'b) Biocaml_transform.t ->
    f:('-> 'c) -> ('a, 'c) Biocaml_transform.t
  val compose :
    ('a, 'b) Biocaml_transform.t ->
    ('b, 'c) Biocaml_transform.t -> ('a, 'c) Biocaml_transform.t
  val mix :
    ('a1, 'b1) Biocaml_transform.t ->
    ('a2, 'b2) Biocaml_transform.t ->
    f:('b1 -> 'b2 -> 'c) -> ('a1 * 'a2, 'c) Biocaml_transform.t
  val filter_compose :
    ('il, 'ol) Biocaml_transform.t ->
    ('ir, 'our) Biocaml_transform.t ->
    destruct:('ol -> [ `No of 'filtered | `Yes of 'ir ]) ->
    reconstruct:([ `Done of 'our | `Filtered of 'filtered ] -> 'result) ->
    ('il, 'result) Biocaml_transform.t
  val split_and_merge :
    ('il, 'ol) Biocaml_transform.t ->
    ('ir, 'our) Biocaml_transform.t ->
    split:('input -> [ `left of 'il | `right of 'ir ]) ->
    merge:([ `left of 'ol | `right of 'our ] -> 'output) ->
    ('input, 'output) Biocaml_transform.t
  val make_result :
    ?name:string ->
    feed:('input -> unit) ->
    next:(bool ->
          [ `end_of_stream | `not_ready | `output of ('a, 'b) Core.Result.t ]) ->
    unit -> ('input, ('a, 'b) Core.Result.t) Biocaml_transform.t
  val on_ok :
    ('input, ('ok, 'error) Core.Result.t) Biocaml_transform.t ->
    f:('ok -> 'still_ok) ->
    ('input, ('still_ok, 'error) Core.Result.t) Biocaml_transform.t
  val on_error :
    ('input, ('ok, 'error) Core.Result.t) Biocaml_transform.t ->
    f:('error -> 'another_errror) ->
    ('input, ('ok, 'another_errror) Core.Result.t) Biocaml_transform.t
  val compose_results :
    on_error:([ `left of 'error_left | `right of 'error_right ] -> 'error) ->
    ('input_left, ('middle, 'error_left) Core.Result.t) Biocaml_transform.t ->
    ('middle, ('output_right, 'error_right) Core.Result.t)
    Biocaml_transform.t ->
    ('input_left, ('output_right, 'error) Core.Result.t) Biocaml_transform.t
  val compose_results_merge_error :
    ('a, ('b, 'el) Core.Result.t) Biocaml_transform.t ->
    ('b, ('d, 'er) Core.Result.t) Biocaml_transform.t ->
    ('a, ('d, [ `left of 'el | `right of 'er ]) Core.Result.t)
    Biocaml_transform.t
  val compose_result_left :
    ('input_left, ('middle, 'error) Core.Result.t) Biocaml_transform.t ->
    ('middle, 'output_right) Biocaml_transform.t ->
    ('input_left, ('output_right, 'error) Core.Result.t) Biocaml_transform.t
  class type ['input, 'output] object_t =
    object
      method feed : 'input -> unit
      method next : [ `end_of_stream | `not_ready | `output of 'output ]
      method stop : unit
    end
  val to_object :
    ('a, 'b) Biocaml_transform.t -> ('a, 'b) Biocaml_transform.object_t
  val of_object :
    ('a, 'b) Biocaml_transform.object_t -> ('a, 'b) Biocaml_transform.t
  module Line_oriented :
    sig
      type parsing_buffer
      val parsing_buffer :
        ?filename:string ->
        unit -> Biocaml_transform.Line_oriented.parsing_buffer
      val feed_line :
        Biocaml_transform.Line_oriented.parsing_buffer -> string -> unit
      val feed_string :
        Biocaml_transform.Line_oriented.parsing_buffer -> string -> unit
      val queued_lines :
        Biocaml_transform.Line_oriented.parsing_buffer -> int
      val is_empty : Biocaml_transform.Line_oriented.parsing_buffer -> bool
      val next_line :
        Biocaml_transform.Line_oriented.parsing_buffer -> string option
      exception No_next_line
      val next_line_exn :
        Biocaml_transform.Line_oriented.parsing_buffer -> string
      val current_position :
        Biocaml_transform.Line_oriented.parsing_buffer -> Biocaml_pos.t
      val contents :
        Biocaml_transform.Line_oriented.parsing_buffer ->
        string list * string option
      val empty : Biocaml_transform.Line_oriented.parsing_buffer -> unit
      val make :
        ?name:string ->
        ?filename:string ->
        next:(Biocaml_transform.Line_oriented.parsing_buffer ->
              [ `not_ready | `output of ('b, 'errnext) Core.Result.t ]) ->
        on_error:([ `incomplete_input of
                      Biocaml_pos.t * string list * string option
                  | `next of 'errnext ] -> 'err) ->
        unit -> (string, ('b, 'err) Core.Result.t) Biocaml_transform.t
      val make_merge_error :
        ?name:string ->
        ?filename:string ->
        next:(Biocaml_transform.Line_oriented.parsing_buffer ->
              [ `not_ready
              | `output of
                  ('a,
                   [> `incomplete_input of
                        Biocaml_pos.t * string list * string option ]
                   as 'b)
                  Core.Result.t ]) ->
        unit -> (string, ('a, 'b) Core.Result.t) Biocaml_transform.t
      val lines : unit -> (string, string) Biocaml_transform.t
    end
  module Printer_queue :
    sig
      type 'a t
      val make :
        ?buffer:[ `clear of int | `reset of int ] ->
        to_string:('-> string) ->
        unit -> 'Biocaml_transform.Printer_queue.t
      val feed : 'Biocaml_transform.Printer_queue.t -> '-> unit
      val flush : 'Biocaml_transform.Printer_queue.t -> string
      val is_empty : 'Biocaml_transform.Printer_queue.t -> bool
    end
  val make_general :
    ?name:string ->
    next:(unit -> [ `end_of_stream | `not_ready | `output of 'output ]) ->
    feed:('input -> unit) ->
    stop:(unit -> unit) -> unit -> ('input, 'output) Biocaml_transform.t
end