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