sig
  type 'a task
  type 'a status = Timeout | Canceled | Result of '| Failed of exn
  type 'a running =
      Waiting
    | Running of (unit -> unit)
    | Finished of 'Task.status
  val error : exn -> string
  val start : 'Task.task -> unit
  val cancel : 'Task.task -> unit
  val wait : 'Task.task -> 'Task.status
  val ping : 'Task.task -> 'Task.running
  val map : ('-> 'b) -> 'Task.status -> 'Task.status
  val pretty :
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Task.status -> unit
  val nop : unit Task.task
  val return : '-> 'Task.task
  val raised : exn -> 'Task.task
  val canceled : unit -> 'Task.task
  val failed :
    ('a, Format.formatter, unit, 'Task.task) Pervasives.format4 -> 'a
  val call : ('-> 'b) -> '-> 'Task.task
  val todo : (unit -> 'Task.task) -> 'Task.task
  val status : 'Task.status -> 'Task.task
  val bind : 'Task.task -> ('Task.status -> 'Task.task) -> 'Task.task
  val sequence : 'Task.task -> ('-> 'Task.task) -> 'Task.task
  val job : 'Task.task -> unit Task.task
  val finally : 'Task.task -> ('Task.status -> unit) -> 'Task.task
  val callback : 'Task.task -> ('Task.status -> unit) -> unit Task.task
  val ( >>> ) :
    'Task.task -> ('Task.status -> 'Task.task) -> 'Task.task
  val ( >>= ) : 'Task.task -> ('-> 'Task.task) -> 'Task.task
  val ( >>? ) : 'Task.task -> ('Task.status -> unit) -> 'Task.task
  val ( >>! ) : 'Task.task -> ('Task.status -> unit) -> unit Task.task
  type mutex
  val mutex : unit -> Task.mutex
  val sync : Task.mutex -> (unit -> 'Task.task) -> 'Task.task
  val command :
    ?timeout:int ->
    ?time:float Pervasives.ref ->
    ?stdout:Buffer.t ->
    ?stderr:Buffer.t -> string -> string array -> int Task.task
  type 'a shared
  val shared :
    descr:string -> retry:bool -> (unit -> 'Task.task) -> 'Task.shared
  val share : 'Task.shared -> 'Task.task
  val run : unit Task.task -> unit
  type server
  val server : ?stages:int -> ?procs:int -> unit -> Task.server
  val spawn : Task.server -> ?stage:int -> unit Task.task -> unit
  val launch : Task.server -> unit
  val cancel_all : Task.server -> unit
  val set_procs : Task.server -> int -> unit
  val on_server_activity : Task.server -> (unit -> unit) -> unit
  val on_server_start : Task.server -> (unit -> unit) -> unit
  val on_server_stop : Task.server -> (unit -> unit) -> unit
  val scheduled : Task.server -> int
  val terminated : Task.server -> int
  val on_idle : ((unit -> bool) -> unit) Pervasives.ref
end