Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Lwt.Infix

module Infix : sig..end

This module provides several infix operators for making programming with Lwt more convenient.

To use it, open Lwt.Infix.

Of the operators declared in this module, only >|= is recommended for new code. The only other commonly-used operator is >>=.


val (>>=) : 'a Lwt.t -> ('a -> 'b Lwt.t) -> 'b Lwt.t

p >>= f is the same as Lwt.bindp f. It requires Lwt.Infix to be opened in scope:

open Lwt.Infix

let () =
  Lwt_main.run
    (Lwt_io.(read_line stdin) >>= Lwt_io.printl)

(* ocamlfind opt -linkpkg -package lwt.unix code.ml && ./a.out *)

It is recommended to use the PPX let%lwt syntax instead. This operator is the next-best choice. It is frequently found while reading existing Lwt code.

val (>|=) : 'a Lwt.t -> ('a -> 'b) -> 'b Lwt.t

p >|= f is the same as Lwt.mapf p. It requires Lwt.Infix to be opened in scope.

open Lwt.Infix

let () =
  Lwt_main.run
    (Lwt_io.(read_line stdin) >|= ignore)

(* ocamlfind opt -linkpkg -package lwt.unix code.ml && ./a.out *)
val (<&>) : unit Lwt.t -> unit Lwt.t -> unit Lwt.t

p1 <&> p2 is the same as Lwt.join[p1; p2]. It requires Lwt.Infix to be opened in scope.

Unlike with Lwt.bind and Lwt.map, there are no problems with explicit Lwt.join syntax, so using this operator is not recommended.

val (<?>) : 'a Lwt.t -> 'a Lwt.t -> 'a Lwt.t

p1 <?> p2 is the same as Lwt.choose[p1; p2]. It requires Lwt.Infix to be opened in scope.

Unlike with Lwt,bind and Lwt.join, there are no problems with explicit Lwt.choose syntax, so using this operator is not recommended.

Futhermore, most users actually need Lwt.pick instead of Lwt.choose.

val (=<<) : ('a -> 'b Lwt.t) -> 'a Lwt.t -> 'b Lwt.t

f =<< p is the same as Lwt.bindp f. It requires Lwt.Infix to be opened in scope.

This operator is obscure and its use is discouraged. It is the same as p >>= f.

val (=|<) : ('a -> 'b) -> 'a Lwt.t -> 'b Lwt.t

f =|< p is the same as Lwt.mapf p. It requires Lwt.Infix to be opened in scope.

This operator is obscure and its use is discouraged. It is the same as p >|= f.