module P: sig
.. end
Producers
type 'a
t = {
}
val empty : unit -> 'a t
Empty producer, get
will always return None
.
val map : ('a -> 'b) -> 'a t -> 'b t
map f prod
returns a producer that produces f x
when
prod
produces x
val when_none : unit Join.chan -> 'a t -> 'a t
when_none k prod
returns a producer that acts like prod
.
Additionnaly, k
is sent a message whenever prod
outputs None
val of_list : 'a list -> 'a t
of_list xs
returns a producer for the elements of xs
val to_list : ('a t * 'a list Join.chan) Join.chan
to_list (prod,k)
asynchronously consumes all the elements produced
by prod
. The complete list, in production order, is sent on k
val of_text : in_channel -> string t
of_text chan
returns a producer prod
built from the lines of
channel chan
. Notice that chan
is closed when end of file
or I/O error occurs.
Killing prod
also closes chan
.
val to_text : (string t * out_channel * unit Join.chan) Join.chan
to_text (prod,chan,k)
asynchronously consumes all the elements produced
by prod
, writing lines to channel chan
in production order.
A unit message is sent on k
when production is over,
i.e. when prod
emits None
.
Notice that prod
is killed and chan
closed in case of I/O error.
val to_text_close : (string t * out_channel) Join.chan
Same as
JoinCom.P.to_text
above except that the channel is closed
as sooon as the producer emits
None
.