sig   type feedback =       [ `Fiber_exn of exn * Printexc.raw_backtrace       | `Fiber_fail of string       | `Miss_tool of B00.Tool.t * string       | `Op_cache_error of B00.Op.t * string       | `Op_complete of B00.Op.t * [ `Did_not_write of B0_std.Fpath.t list ] ]   val pp_feedback : B00.Memo.feedback B0_std.Fmt.t   type t   val create :     ?clock:B0_std.Time.counter ->     ?cpu_clock:B0_std.Time.cpu_counter ->     feedback:(B00.Memo.feedback -> unit) ->     cwd:B0_std.Fpath.t ->     B00.Env.t -> B00.Guard.t -> B00.Op_cache.t -> B00.Exec.t -> B00.Memo.t   val memo :     ?hash_fun:(module B0_std.Hash.T->     ?env:B0_std.Os.Env.t ->     ?cwd:B0_std.Fpath.t ->     ?cachedir:B0_std.Fpath.t ->     ?max_spawn:int ->     ?feedback:([ `Exec_submit of B0_std.Os.Cmd.pid option * B00.Op.t                | `Fiber_exn of exn * Printexc.raw_backtrace                | `Fiber_fail of string                | `File_cache_need_copy of B0_std.Fpath.t                | `Miss_tool of B00.Tool.t * string                | `Op_cache_error of B00.Op.t * string                | `Op_complete of                    B00.Op.t * [ `Did_not_write of B0_std.Fpath.t list ] ] ->                unit) ->     unit -> (B00.Memo.t, string) Pervasives.result   val clock : B00.Memo.t -> B0_std.Time.counter   val cpu_clock : B00.Memo.t -> B0_std.Time.cpu_counter   val env : B00.Memo.t -> B00.Env.t   val op_cache : B00.Memo.t -> B00.Op_cache.t   val guard : B00.Memo.t -> B00.Guard.t   val exec : B00.Memo.t -> B00.Exec.t   val stir : block:bool -> B00.Memo.t -> unit   val finish : B00.Memo.t -> (unit, B0_std.Fpath.Set.t) Pervasives.result   val ops : B00.Memo.t -> B00.Op.t list   type 'a fiber = ('-> unit) -> unit   val fail : ('b, Format.formatter, unit, 'a) Pervasives.format4 -> 'b   val fail_error : ('a, string) Pervasives.result -> 'a   val file_ready : B00.Memo.t -> B0_std.Fpath.t -> unit   val wait_files : B00.Memo.t -> B0_std.Fpath.t list -> unit B00.Memo.fiber   val read : B00.Memo.t -> B0_std.Fpath.t -> string B00.Memo.fiber   val write :     B00.Memo.t ->     ?salt:string ->     ?reads:B0_std.Fpath.t list ->     ?mode:int ->     B0_std.Fpath.t -> (unit -> (string, string) Pervasives.result) -> unit   val mkdir : B00.Memo.t -> B0_std.Fpath.t -> unit B00.Memo.fiber   type tool   type cmd   val tool : B00.Memo.t -> B00.Tool.t -> B0_std.Cmd.t -> B00.Memo.cmd   val spawn :     B00.Memo.t ->     ?reads:B0_std.Fpath.t list ->     ?writes:B0_std.Fpath.t list ->     ?env:B0_std.Os.Env.t ->     ?cwd:B0_std.Fpath.t ->     ?stdin:B0_std.Fpath.t ->     ?stdout:B00.Op.Spawn.stdo ->     ?stderr:B00.Op.Spawn.stdo ->     ?success_exits:B00.Op.Spawn.success_exits ->     ?k:(int -> unit) -> B00.Memo.cmd -> unit   module Fut :     sig       type 'a set       val set : 'B00.Memo.Fut.set -> '-> unit       type memo = B00.Memo.t       type 'a t       val create :         B00.Memo.Fut.memo -> 'B00.Memo.Fut.t * 'B00.Memo.Fut.set       val value : 'B00.Memo.Fut.t -> 'a option       val wait : 'B00.Memo.Fut.t -> 'B00.Memo.fiber     end end