sig
  module Reader : sig type 'a t end
  module Writer : sig type 'a t end
  val create :
    unit -> 'Async.Std.Pipe.Reader.t * 'Async.Std.Pipe.Writer.t
  val write : 'Async.Std.Pipe.Writer.t -> '-> unit Async.Std.Deferred.t
  val read :
    'Async.Std.Pipe.Reader.t -> [ `Eof | `Ok of 'a ] Async.Std.Deferred.t
end