package async_kernel

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

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
include Core_kernel.Invariant.S1 with type 'a t := 'a Async_kernel__.Types.Deferred.t
val invariant : ('a -> unit) -> 'a Async_kernel__.Types.Deferred.t -> unit
include Core_kernel.Monad with type 'a t := 'a Async_kernel__.Types.Deferred.t
val (>>=) : 'a Async_kernel__.Types.Deferred.t -> ('a -> 'b Async_kernel__.Types.Deferred.t) -> 'b Async_kernel__.Types.Deferred.t

t >>= f returns a computation that sequences the computations represented by two monad elements. The resulting computation first does t to yield a value v, and then runs the computation returned by f v.

val (>>|) : 'a Async_kernel__.Types.Deferred.t -> ('a -> 'b) -> 'b Async_kernel__.Types.Deferred.t

t >>| f is t >>= (fun a -> return (f a)).

module Monad_infix : sig ... end
val bind : 'a Async_kernel__.Types.Deferred.t -> f:('a -> 'b Async_kernel__.Types.Deferred.t) -> 'b Async_kernel__.Types.Deferred.t

bind t ~f = t >>= f

val return : 'a -> 'a Async_kernel__.Types.Deferred.t

return v returns the (trivial) computation that returns v.

val map : 'a Async_kernel__.Types.Deferred.t -> f:('a -> 'b) -> 'b Async_kernel__.Types.Deferred.t

map t ~f is t >>| f.

val join : 'a Async_kernel__.Types.Deferred.t Async_kernel__.Types.Deferred.t -> 'a Async_kernel__.Types.Deferred.t

join t is t >>= (fun t' -> t').

val ignore_m : 'a Async_kernel__.Types.Deferred.t -> unit Async_kernel__.Types.Deferred.t

ignore_m t is map t ~f:(fun _ -> ()). ignore_m used to be called ignore, but we decided that was a bad name, because it shadowed the widely used Pervasives.ignore. Some monads still do let ignore = ignore_m for historical reasons.

val all : 'a Async_kernel__.Types.Deferred.t list -> 'a list Async_kernel__.Types.Deferred.t
val all_unit : unit Async_kernel__.Types.Deferred.t list -> unit Async_kernel__.Types.Deferred.t
val all_ignore : unit Async_kernel__.Types.Deferred.t list -> unit Async_kernel__.Types.Deferred.t
  • deprecated [since 2018-02] Use [all_unit]
module Let_syntax : sig ... end

These are convenient to have in scope when programming with a monad:

module Infix : sig ... end
val any : 'a Async_kernel__.Types.Deferred.t list -> 'a Async_kernel__.Types.Deferred.t
val any_unit : 'a Async_kernel__.Types.Deferred.t list -> unit Async_kernel__.Types.Deferred.t
val both : 'a Async_kernel__.Types.Deferred.t -> 'b Async_kernel__.Types.Deferred.t -> ('a * 'b) Async_kernel__.Types.Deferred.t
val create : ('a Ivar.t -> unit) -> 'a Async_kernel__.Types.Deferred.t
val don't_wait_for : unit Async_kernel__.Types.Deferred.t -> unit
val ignore : _ Async_kernel__.Types.Deferred.t -> unit Async_kernel__.Types.Deferred.t
val is_determined : 'a Async_kernel__.Types.Deferred.t -> bool
val never : unit -> _ Async_kernel__.Types.Deferred.t
val ok : 'a Async_kernel__.Types.Deferred.t -> ('a, _) Core_kernel.Result.t Async_kernel__.Types.Deferred.t
val peek : 'a Async_kernel__.Types.Deferred.t -> 'a option
val unit : unit Async_kernel__.Types.Deferred.t
val upon : 'a Async_kernel__.Types.Deferred.t -> ('a -> unit) -> unit
val value_exn : 'a Async_kernel__.Types.Deferred.t -> 'a
val repeat_until_finished : 'state -> ('state -> [ `Repeat of 'state | `Finished of 'result ] Async_kernel__.Types.Deferred.t) -> 'result Async_kernel__.Types.Deferred.t
module List : sig ... end
module Or_error : sig ... end