sig
  type 'a t
  val return : '-> 'Sqlexpr_concurrency.THREAD.t
  val bind :
    'Sqlexpr_concurrency.THREAD.t ->
    ('-> 'Sqlexpr_concurrency.THREAD.t) ->
    'Sqlexpr_concurrency.THREAD.t
  val fail : exn -> 'Sqlexpr_concurrency.THREAD.t
  val catch :
    (unit -> 'Sqlexpr_concurrency.THREAD.t) ->
    (exn -> 'Sqlexpr_concurrency.THREAD.t) ->
    'Sqlexpr_concurrency.THREAD.t
  val finalize :
    (unit -> 'Sqlexpr_concurrency.THREAD.t) ->
    (unit -> unit Sqlexpr_concurrency.THREAD.t) ->
    'Sqlexpr_concurrency.THREAD.t
  val sleep : float -> unit Sqlexpr_concurrency.THREAD.t
  val auto_yield : float -> unit -> unit Sqlexpr_concurrency.THREAD.t
  type mutex
  val create_recursive_mutex : unit -> Sqlexpr_concurrency.THREAD.mutex
  val with_lock :
    Sqlexpr_concurrency.THREAD.mutex ->
    (unit -> 'Sqlexpr_concurrency.THREAD.t) ->
    'Sqlexpr_concurrency.THREAD.t
  val register_finaliser :
    ('-> unit Sqlexpr_concurrency.THREAD.t) -> '-> unit
  type 'a key
  val new_key : unit -> 'a key
  val get : 'a key -> 'a option
  val with_value : 'a key -> 'a option -> (unit -> 'b t) -> 'b t
end