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

Module Lwt_pool

module Lwt_pool : sig..end

Creating pools (for example pools of connections to a database).

Instead of creating a new connection each time you need one, keep a pool of opened connections and reuse opened connections that are free.

type 'a t

Type of pools

val create : 
  int ->
  ?check:('a -> (bool -> unit) -> unit) ->
  ?validate:('a -> bool Lwt.t) -> (unit -> 'a Lwt.t) -> 'a t

create n ?check ?validate f creates a new pool with at most n members. f is the function to use to create a new pool member.

An element of the pool is validated by the optional validate function before its Lwt_pool.use. Invalid elements are re-created.

The optional function check is called after a use of an element failed. It must call its argument exactly once with true if the pool member is still valid and false otherwise.

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

use p f takes one free member of the pool p and gives it to the function f.