sig
  type 'a task
  type 'a status = Canceled | Result of '| Failed of exn
  type 'a running = Running of (unit -> unit) | Finished of 'Task.status
  val start : 'Task.task -> unit
  val cancel : 'Task.task -> unit
  val wait : 'Task.task -> 'Task.status
  val ping : 'Task.task -> 'Task.running
  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 bind : 'Task.task -> ('Task.status -> 'Task.task) -> 'Task.task
  val sequence : 'Task.task -> ('-> 'Task.task) -> 'Task.task
  val todo : (unit -> 'Task.task) -> '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 ->
    ?stdout:Buffer.t ->
    ?stderr:Buffer.t -> string -> string array -> int Task.task
  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 set_callback : Task.server -> (unit -> unit) -> unit
  val load : Task.server -> int
  val on_idle : ((unit -> bool) -> unit) Pervasives.ref
end