sig   type id = int   type t   val id : B0.Outcome.Op.t -> B0.Outcome.Op.id   val unit_id : B0.Outcome.Op.t -> B0.Unit.id   val aim : B0.Outcome.Op.t -> B0.Env.build_aim   val reads : B0.Outcome.Op.t -> B0.Fpath.set   val writes : B0.Outcome.Op.t -> B0.Fpath.set   val creation_time : B0.Outcome.Op.t -> B0.Time.span   val exec_start_time : B0.Outcome.Op.t -> B0.Time.span   val exec_end_time : B0.Outcome.Op.t -> B0.Time.span   val cached : B0.Outcome.Op.t -> bool   type status = Guarded | Ready | Executed | Finished   val status : B0.Outcome.Op.t -> B0.Outcome.Op.status   val pp_status : B0.Outcome.Op.status B0.Fmt.t   val stamp : B0.Outcome.Op.t -> B0.Stamp.t   type spawn_pid = int   type spawn_stdo = [ `File of B0.Fpath.t | `Tee of B0.Fpath.t | `Ui ]   type spawn_stdo_ui =       [ `None | `Stdo of string B0.result | `Tmp_file of B0.Fpath.t ]   type spawn_env = string array   type spawn_success_codes = int list option   type spawn   val spawn_cmd : B0.Outcome.Op.spawn -> B0.Cmd.t   val spawn_env : B0.Outcome.Op.spawn -> B0.Outcome.Op.spawn_env   val spawn_cwd : B0.Outcome.Op.spawn -> B0.Fpath.t   val spawn_stdin : B0.Outcome.Op.spawn -> B0.Fpath.t option   val spawn_stdout : B0.Outcome.Op.spawn -> B0.Outcome.Op.spawn_stdo   val spawn_stderr : B0.Outcome.Op.spawn -> B0.Outcome.Op.spawn_stdo   val spawn_success_codes : B0.Outcome.Op.spawn -> int list option   val spawn_stdo_ui : B0.Outcome.Op.spawn -> B0.Outcome.Op.spawn_stdo_ui   val set_spawn_stdo_ui :     B0.Outcome.Op.spawn -> B0.Outcome.Op.spawn_stdo_ui -> unit   val spawn_result :     B0.Outcome.Op.spawn ->     (B0.Outcome.Op.spawn_pid * B0.OS.Cmd.status) B0.result   type read   val read_file : B0.Outcome.Op.read -> B0.Fpath.t   val read_result : B0.Outcome.Op.read -> string B0.result   type write   val write :     B0.Unit.t ->     B0.Env.build_aim ->     B0.Time.span -> reads:B0.Fpath.set -> B0.Fpath.t -> B0.Outcome.Op.t   val write_file : B0.Outcome.Op.write -> B0.Fpath.t   val write_data : B0.Outcome.Op.write -> string   val set_write_data : B0.Outcome.Op.write -> string -> unit   val write_result : B0.Outcome.Op.write -> unit B0.result   type copy_file   val copy_file_src : B0.Outcome.Op.copy_file -> B0.Fpath.t   val copy_file_dst : B0.Outcome.Op.copy_file -> B0.Fpath.t   val copy_file_linenum : B0.Outcome.Op.copy_file -> int option   val copy_file_result : B0.Outcome.Op.copy_file -> unit B0.result   type delete   val delete_file : B0.Outcome.Op.delete -> B0.Fpath.t   val delete_result : B0.Outcome.Op.delete -> unit B0.result   type mkdir   val mkdir_dir : B0.Outcome.Op.mkdir -> B0.Fpath.t   val mkdir_result : B0.Outcome.Op.mkdir -> unit B0.result   type sync   val sync_units : B0.Outcome.Op.sync -> B0.Unit.Idset.t   type kind =       Spawn of B0.Outcome.Op.spawn     | Read of B0.Outcome.Op.read     | Write of B0.Outcome.Op.write     | Copy_file of B0.Outcome.Op.copy_file     | Delete of B0.Outcome.Op.delete     | Mkdir of B0.Outcome.Op.mkdir     | Sync of B0.Outcome.Op.sync   val kind : B0.Outcome.Op.t -> B0.Outcome.Op.kind   val cycle :     B0.Outcome.Op.t -> B0.Outcome.Op.t -> (B0.Fpath.t * B0.Fpath.t) option   val equal : B0.Outcome.Op.t -> B0.Outcome.Op.t -> bool   val compare : B0.Outcome.Op.t -> B0.Outcome.Op.t -> int   val compare_exec_start_time : B0.Outcome.Op.t -> B0.Outcome.Op.t -> int   val pp : B0.Outcome.Op.t B0.Fmt.t   val dump : B0.Outcome.Op.t B0.Fmt.t   val pp_spawn_fail : B0.Outcome.Op.t B0.Fmt.t   val pp_log_line : B0.Outcome.Op.t B0.Fmt.t   val pp_long : B0.Outcome.Op.t B0.Fmt.t   type set   module Set :     sig       type t = set       val empty : t       val is_empty : t -> bool       val mem : t -> t -> bool       val add : t -> t -> t       val singleton : t -> t       val remove : t -> t -> t       val union : t -> t -> t       val inter : t -> t -> t       val diff : t -> t -> t       val compare : t -> t -> int       val equal : t -> t -> bool       val subset : t -> t -> bool       val iter : (t -> unit) -> t -> unit       val fold : (t -> '-> 'a) -> t -> '-> 'a       val for_all : (t -> bool) -> t -> bool       val exists : (t -> bool) -> t -> bool       val filter : (t -> bool) -> t -> t       val partition : (t -> bool) -> t -> t * t       val cardinal : t -> int       val elements : t -> t list       val min_elt : t -> t       val max_elt : t -> t       val choose : t -> t       val split : t -> t -> t * bool * t       val find : t -> t -> t       val of_list : t list -> t     end   type +'a map   module Map :     sig       val empty : 'a map       val is_empty : 'a map -> bool       val mem : t -> 'a map -> bool       val add : t -> '-> 'a map -> 'a map       val singleton : t -> '-> 'a map       val remove : t -> 'a map -> 'a map       val merge :         (t -> 'a option -> 'b option -> 'c option) ->         'a map -> 'b map -> 'c map       val union : (t -> '-> '-> 'a option) -> 'a map -> 'a map -> 'a map       val compare : ('-> '-> int) -> 'a map -> 'a map -> int       val equal : ('-> '-> bool) -> 'a map -> 'a map -> bool       val iter : (t -> '-> unit) -> 'a map -> unit       val fold : (t -> '-> '-> 'b) -> 'a map -> '-> 'b       val for_all : (t -> '-> bool) -> 'a map -> bool       val exists : (t -> '-> bool) -> 'a map -> bool       val filter : (t -> '-> bool) -> 'a map -> 'a map       val partition : (t -> '-> bool) -> 'a map -> 'a map * 'a map       val cardinal : 'a map -> int       val bindings : 'a map -> (t * 'a) list       val min_binding : 'a map -> t * 'a       val max_binding : 'a map -> t * 'a       val choose : 'a map -> t * 'a       val split : t -> 'a map -> 'a map * 'a option * 'a map       val find : t -> 'a map -> 'a       val map : ('-> 'b) -> 'a map -> 'b map       val mapi : (t -> '-> 'b) -> 'a map -> 'b map       val dom : 'B0.Outcome.Op.map -> B0.Outcome.Op.set       val of_list : (B0.Outcome.Op.t * 'a) list -> 'B0.Outcome.Op.map       type 'a t = 'B0.Outcome.Op.map     end end