sig
  type ('a, 'phantom) t = ('a, 'phantom) Pipe.t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('phantom -> Sexplib.Sexp.t) -> ('a, 'phantom) t -> Sexplib.Sexp.t
  type ('a, 'phantom) pipe = ('a, 'phantom) t
  val sexp_of_pipe :
    ('-> Sexplib.Sexp.t) ->
    ('phantom -> Sexplib.Sexp.t) -> ('a, 'phantom) pipe -> Sexplib.Sexp.t
  module Writer :
    sig
      type phantom = Pipe.Writer.phantom
      type 'a t = ('a, phantom) pipe
      val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
      val invariant : 'a t -> unit
    end
  module Reader :
    sig
      type phantom = Pipe.Reader.phantom
      type 'a t = ('a, phantom) pipe
      val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
      val invariant : 'a t -> unit
    end
  val create : unit -> 'Reader.t * 'Writer.t
  val of_list : 'a list -> 'Reader.t
  val close : 'Writer.t -> unit
  val close_read : 'Reader.t -> unit
  val is_closed : ('a, 'b) t -> bool
  val closed : ('a, 'b) t -> unit Deferred.t
  val flushed : ('a, 'b) t -> [ `Ok | `Reader_closed ] Deferred.t
  val length : ('a, 'b) t -> int
  val pushback : 'Writer.t -> unit Deferred.t
  val write' : 'Writer.t -> 'Core.Std.Queue.t -> unit Deferred.t
  val write : 'Writer.t -> '-> unit Deferred.t
  val with_write :
    'Writer.t ->
    f:(('-> unit) -> 'b) -> [ `Closed | `Ok of 'b ] Deferred.t
  val read' : 'Reader.t -> [ `Eof | `Ok of 'Core.Std.Queue.t ] Deferred.t
  val read : 'Reader.t -> [ `Eof | `Ok of 'a ] Deferred.t
  val read_at_most :
    'Reader.t ->
    num_values:int -> [ `Eof | `Ok of 'Core.Std.Queue.t ] Deferred.t
  val read_exactly :
    'Reader.t ->
    num_values:int ->
    [ `Eof | `Exactly of 'Core.Std.Queue.t | `Fewer of 'Core.Std.Queue.t ]
    Deferred.t
  val read_now :
    'Reader.t -> [ `Eof | `Nothing_available | `Ok of 'Core.Std.Queue.t ]
  val clear : 'Reader.t -> unit
  val read_all : 'Reader.t -> 'Core.Std.Queue.t Deferred.t
  val values_available : 'Reader.t -> [ `Eof | `Ok ] Deferred.t
  val fold' :
    'Reader.t ->
    init:'->
    f:('-> 'Core.Std.Queue.t -> 'Deferred.t) -> 'Deferred.t
  val fold : 'Reader.t -> init:'-> f:('-> '-> 'b) -> 'Deferred.t
  val iter' :
    'Reader.t ->
    f:('Core.Std.Queue.t -> unit Deferred.t) -> unit Deferred.t
  val iter : 'Reader.t -> f:('-> unit Deferred.t) -> unit Deferred.t
  val iter_without_pushback :
    'Reader.t -> f:('-> unit) -> unit Deferred.t
  val transfer' :
    'Reader.t ->
    'Writer.t ->
    f:('Core.Std.Queue.t -> 'Core.Std.Queue.t Deferred.t) ->
    unit Deferred.t
  val transfer :
    'Reader.t -> 'Writer.t -> f:('-> 'b) -> unit Deferred.t
  val transfer_id : 'Reader.t -> 'Writer.t -> unit Deferred.t
  val map' :
    'Reader.t ->
    f:('Core.Std.Queue.t -> 'Core.Std.Queue.t Deferred.t) -> 'Reader.t
  val map : 'Reader.t -> f:('-> 'b) -> 'Reader.t
  val filter_map' :
    'Reader.t -> f:('-> 'b option Deferred.t) -> 'Reader.t
  val filter_map : 'Reader.t -> f:('-> 'b option) -> 'Reader.t
  val filter : 'Reader.t -> f:('-> bool) -> 'Reader.t
  val interleave : 'Reader.t list -> 'Reader.t
  val concat : 'Reader.t list -> 'Reader.t
  val to_stream : 'Reader.t -> 'Async_stream.t
  val of_stream : 'Async_stream.t -> 'Reader.t
  val drain : 'Reader.t -> unit Deferred.t
  val drain_and_count : 'Reader.t -> int Deferred.t
  val to_list : 'Reader.t -> 'a list Deferred.t
  val hash : ('a, 'b) t -> int
  val equal : ('a, 'b) t -> ('a, 'b) t -> bool
  val size_budget : ('a, 'b) t -> int
  val set_size_budget : ('a, 'b) t -> int -> unit
  val show_debug_messages : bool ref
  val check_invariant : bool ref
  val ounit_tests : unit -> OUnit.test
end