`type 'a t``= 'a option Async_kernel__.Deferred0.t```
`include Base__.Monad_intf.S_without_syntax with type a t := a t`
`type 'a t`````
`include Base__.Monad_intf.Infix with type a t := a t`
`type '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 : Base__.Monad_intf.Infix with type a t := a t`
`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 `Pervasives.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`
`val all_ignore : unit t list ‑> unit t`

- Deprecated [since 2018-02] Use [all_unit]

`include Base__.Monad_intf.Syntax with type a t := a t`
`type 'a t`````
`module Let_syntax : sig ... end`