sig
  type 'a t = { get : 'a option Join.chan Join.chan; kill : unit Join.chan; }
  val empty : unit -> 'JoinCom.P.t
  val map : ('-> 'b) -> 'JoinCom.P.t -> 'JoinCom.P.t
  val when_none : unit Join.chan -> 'JoinCom.P.t -> 'JoinCom.P.t
  val of_list : 'a list -> 'JoinCom.P.t
  val to_list : ('JoinCom.P.t * 'a list Join.chan) Join.chan
  val of_text : Pervasives.in_channel -> string JoinCom.P.t
  val to_text :
    (string JoinCom.P.t * Pervasives.out_channel * unit Join.chan) Join.chan
  val to_text_close : (string JoinCom.P.t * Pervasives.out_channel) Join.chan
end