package async_kernel

  1. Overview
  2. Docs
Module type
Class type

Laziness_preserving_deferred offers a monad for working with lazy deferreds that has similar semantics to the Deferred monad. In the regular Lazy_deferred monad, each map/bind introduces a new lazy computation, and nothing runs unless explicitly forced. By contrast, this monad lets you build up a tree of computations that can be "weakly run," meaning that it will run until it encounters an unforced lazy deferred, at which point it will wait for that lazy deferred to be forced before continuing.

type 'a t
include Core.Monad.S with type 'a t := 'a t
val (>>=) : 'a t -> ('a -> 'b t) -> 'b 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 t -> ('a -> 'b) -> 'b t

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

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

bind t ~f = t >>= f

val return : 'a -> 'a t

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

val map : 'a t -> f:('a -> 'b) -> 'b t

map t ~f is t >>| f.

val join : 'a t t -> 'a t

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

val ignore_m : 'a t -> unit 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 Stdlib.ignore. Some monads still do let ignore = ignore_m for historical reasons.

val all : 'a t list -> 'a list t
val all_unit : unit t list -> unit t

Like all, but ensures that every monadic value in the list produces a unit value, all of which are discarded rather than being collected into a list.

module Let_syntax : sig ... end

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

val of_eager : 'a Async_kernel.Deferred.t -> 'a t
val of_lazy : 'a Async_kernel.Lazy_deferred.t -> 'a t
val force : 'a t -> 'a Async_kernel.Deferred.Or_error.t

Begin computing 'a t, forcing lazy deferreds as they are encountered.

val weak_run : 'a t -> 'a Async_kernel.Deferred.Or_error.t

Begin computing 'a t, waiting on lazy deferreds as they are encountered.


Innovation. Community. Security.