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

Module Lwt_main

module Lwt_main : sig..end

Main loop and event queue


This module controls the ``main-loop'' of Lwt.

val run : 'a Lwt.t -> 'a

Lwt_main.run p calls the Lwt scheduler, performing I/O until p resolves. Lwt_main.run p returns the value in p if p is fulfilled. If p is rejected with an exception instead, Lwt_main.run p raises that exception.

Every native and bytecode program that uses Lwt should call this function at its top level. It implements the Lwt main loop.

Example:

let main () = Lwt_io.write_line Lwt_io.stdout "hello world"

let () = Lwt_main.run (main ())

Lwt_main.run is not available when targeting JavaScript, because the environment (such as Node.js or the browser's script engine) implements the I/O loop.

On Unix, calling Lwt_main.run installs a SIGCHLD handler, which is needed for the implementations of Lwt_unix.waitpid and Lwt_unix.wait4. As a result, programs that call Lwt_main.run and also use non-Lwt system calls need to handle those system calls failing with EINTR.

Nested calls to Lwt_main.run are not allowed. That is, do not call Lwt_main.run in a callback triggered by a promise that is resolved by an outer invocation of Lwt_main.run. If your program makes such a call, Lwt_main.run will raise Failure. This should be considered a logic error (i.e., code making such a call is inherently broken).

It is not safe to call Lwt_main.run in a function registered with Pervasives.at_exit, use Lwt_main.at_exit instead.

val yield : unit -> unit Lwt.t

yield () is a threads which suspends itself and then resumes as soon as possible and terminates.

module type Hooks = sig..end

Hook sequences.

module Enter_iter_hooks : Hookswith type 'return_value kind = 'return_value

Hooks, of type unit -> unit, that are called before each iteration of the Lwt main loop.

module Leave_iter_hooks : Hookswith type 'return_value kind = 'return_value

Hooks, of type unit -> unit, that are called after each iteration of the Lwt main loop.

module Exit_hooks : Hookswith type 'return_value kind = 'return_value Lwt.t

Promise-returning hooks, of type unit -> unit Lwt.t, that are called at process exit.

val enter_iter_hooks : (unit -> unit) Lwt_sequence.t

Deprecated.Use module Lwt_main.Enter_iter_hooks.

val leave_iter_hooks : (unit -> unit) Lwt_sequence.t

Deprecated.Use module Lwt_main.Leave_iter_hooks.

val exit_hooks : (unit -> unit Lwt.t) Lwt_sequence.t

Deprecated.Use module Lwt_main.Exit_hooks.

val at_exit : (unit -> unit Lwt.t) -> unit

Lwt_main.at_exit hook is the same as ignore (Lwt_main.Exit_hooks.add_first hook).