A delayed computation that can produce a deferred.
Nothing happens with a lazy deferred unless one
forces it. Forcing a lazy deferred
starts the computation, which will eventually cause the deferred to become determined.
As usual with laziness, multiply forcing a lazy deferred is no different than forcing
it a single time.
Exceptions (both synchronous and asynchronous) raised by a delayed computation are
peek, etc.), or will be raised to the monitor in effect
peek_exn, etc.) was called.
The type is not exposed nor defined as
'a Deferred.t Lazy.t or
Deferred.t Lazy.t, because there is a difference in power with these types. There is
no way to hook an asynchronous computation to a lazy value in OCaml to be triggered
when the lazy gets computed. This functionality is indeed offered by this module
wait). Plus, dealing with exception raised by the closures provided is
slightly easier when done consistently through this API.
There is no
val of_lazy : 'a Deferred.t Lazy.t -> 'a t because of the difference
A monad is an abstraction of the concept of sequencing of computations. A value of type 'a monad represents a computation that returns a value of type 'a.
return v returns the (trivial) computation that returns v.