Up

module Ivar

: sig

A write-once cell that can be empty or full (i.e. hold a single value).

One can read an ivar to obtain a deferred that becomes determined when the ivar is filled. An ivar is similar to an 'a option ref, except it is an error to fill an already full ivar.

#
type 'a t
#
type 'a ivar = 'a t
include Core.Std.Invariant.S1 with type 'a t := 'a t
#
val equal : 'a t -> 'a t -> bool

equal t t' is physical equality of t and t'.

#
val create : unit -> 'a t

create () returns an empty ivar, create_full, a full one.

#
val create_full : 'a -> 'a t
#
val fill : 'a t -> 'a -> unit

fill t v fills t with value v if t was empty. If t was full, fill raises an exception.

It is guaranteed that immediately after calling fill t, is_some (Deferred.peek (read t)).

#
val fill_if_empty : 'a t -> 'a -> unit

fill_if_empty t v fills t with v if t is currently empty. If t is full, then fill_if_empty does nothing.

#
val is_empty : 'a t -> bool

is_empty t returns true if t is empty

#
val is_full : 'a t -> bool

is_full t returns true if t is full

#
module Deferred : sig

The Deferred module exposed here is for Async's internal use only.

#
type +'a t
#
module Handler : sig
#
type 'a t
#
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
end
#
val create : ('a ivar -> unit) -> 'a t
#
val peek : 'a t -> 'a option
#
val is_determined : _ t -> bool
#
val return : 'a -> 'a t
#
val upon : 'a t -> ('a -> unit) -> unit
#
val bind : 'a t -> ('a -> 'b t) -> 'b t
#
val add_handler : 'a t -> ('a -> unit) -> Execution_context.t -> 'a Handler.t
#
val remove_handler : 'a t -> 'a Handler.t -> unit
#
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
end
#
val read : 'a t -> 'a Deferred.t

read t returns a deferred that becomes enabled with value v after the ivar is filled with v.

#
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
#
val bin_t : 'a Core.Std.Bin_prot.Type_class.t -> 'a t Core.Std.Bin_prot.Type_class.t
#
val bin_read_t : 'a Core.Std.Bin_prot.Read.reader -> 'a t Core.Std.Bin_prot.Read.reader
#
val __bin_read_t__ : 'a Core.Std.Bin_prot.Read.reader -> (int -> 'a t) Core.Std.Bin_prot.Read.reader
#
val bin_reader_t : 'a Core.Std.Bin_prot.Type_class.reader -> 'a t Core.Std.Bin_prot.Type_class.reader
#
val bin_size_t : 'a Core.Std.Bin_prot.Size.sizer -> 'a t Core.Std.Bin_prot.Size.sizer
#
val bin_write_t : 'a Core.Std.Bin_prot.Write.writer -> 'a t Core.Std.Bin_prot.Write.writer
#
val bin_writer_t : 'a Core.Std.Bin_prot.Type_class.writer -> 'a t Core.Std.Bin_prot.Type_class.writer
end