Eager_deferred
partially implements the Deferred
interface, with a type 'a t
equal to 'a Deferred.t
, but where the operations are "eager", that is built upon a
world where bind
, map
, and upon
eagerly apply their closure without preemption
in the case the deferred they are working with is already determined.
The goal with that approach is that one can locally write the following to switch to such a world.
open Use_eager_deferred
We do not intend at first for this to implement the entire Deferred
interface,
because some of this will require more experimentation and discussions. We can
proceed incrementally to enrich this interface.
test/test_eager_deferred
verifies that this interface is a sub interface of the
Deferred
interface. For documentation, refer to Deferred
.
include sig ... end with type a t := a Async_kernel__.Deferred1.t
include Core_kernel.Invariant.S1 with type a t := a t
val invariant : 'a Base__.Invariant_intf.inv ‑> 'a t Base__.Invariant_intf.inv
include Core_kernel.Monad with type a t := a t
include Base__.Monad_intf.S_without_syntax with type a t := a t
type 'a t
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.
include Base__.Monad_intf.Infix with type a t := a t
module Monad_infix : Base__.Monad_intf.Infix with type a t := a t
module Infix : sig ... end
val create : ('a Async_kernel.Ivar.t ‑> unit) ‑> 'a t
val don't_wait_for : unit t ‑> unit
val is_determined : 'a t ‑> bool
val never : unit ‑> _ t
val ok : 'a t ‑> ('a, _) Core_kernel.Result.t t
val peek : 'a t ‑> 'a option
val unit : unit t
val upon : 'a t ‑> ('a ‑> unit) ‑> unit
val value_exn : 'a t ‑> 'a
module List : Async_kernel__.Deferred1.Monad_sequence with type 'a t = 'a list