sig   type t   val of_build : ?prev:B0.Outcome.t -> B0.build -> B0.Outcome.t   val read : B0.Fpath.t -> B0.Outcome.t B0.result   val write : B0.Fpath.t -> B0.Outcome.t -> unit B0.result   val fpath_meta : B0.Outcome.t -> B0.Meta.Fpath.Map.t   val conf : B0.Outcome.t -> B0.Conf.t   val unit_names : B0.Outcome.t -> string list   val unit_id_name_map : B0.Outcome.t -> string B0.Unit.Idmap.t   val unit_id_set : string list -> B0.Outcome.t -> B0.Unit.Idset.t   val root_files : B0.Outcome.t -> B0.Fpath.set   val built_files : B0.Outcome.t -> B0.Fpath.set   module Op :     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       type status = Guarded | Ready | Executed | Cached | Aborted       val status : B0.Outcome.Op.t -> B0.Outcome.Op.status       val cached : B0.Outcome.Op.t -> bool       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_allowed_exits = 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_allowed_exits : B0.Outcome.Op.spawn -> int list option       val spawn_stdo_ui : B0.Outcome.Op.spawn -> B0.Outcome.Op.spawn_stdo_ui       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 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 kind_to_string : B0.Outcome.Op.kind -> string       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 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   val ops : B0.Outcome.t -> B0.Outcome.Op.t list   val pp_stats : B0.Outcome.t B0.Fmt.t end