sig   type key = B0.Hash.t   val key_of_string : string -> B0.Cache.key B0.result   val key_to_string : B0.Cache.key -> string   val pp_key : B0.Cache.key B0.Fmt.t   type elt   val elt :     variant:string ->     age:int ->     op:B0.Cmd.t ->     key:B0.Hash.t -> B0.Fpath.t -> file_stamp:B0.Stamp.t -> B0.Cache.elt   val elt_variant : B0.Cache.elt -> string   val elt_age : B0.Cache.elt -> int   val elt_op : B0.Cache.elt -> B0.Cmd.t   val elt_key : B0.Cache.elt -> B0.Cache.key   val elt_file_path : B0.Cache.elt -> B0.Fpath.t   val elt_file_stamp : B0.Cache.elt -> B0.Stamp.t   type t   val empty : index_file:B0.Fpath.t -> dir:B0.Fpath.t -> B0.Cache.t   val is_empty : B0.Cache.t -> bool   val dir : B0.Cache.t -> B0.Fpath.t   val index_file : B0.Cache.t -> B0.Fpath.t   val exists : index_file:B0.Fpath.t -> bool B0.result   val load : index_file:B0.Fpath.t -> dir:B0.Fpath.t -> B0.Cache.t B0.result   val save : B0.Cache.t -> unit B0.result   val mem : B0.Cache.t -> B0.Cache.key -> bool   val add : B0.Cache.t -> B0.Cache.elt -> unit B0.result   val rem : B0.Cache.t -> B0.Cache.key -> unit B0.result   val find : B0.Cache.t -> B0.Cache.key -> B0.Cache.elt option   val use : B0.Cache.t -> B0.Cache.key -> bool B0.result   val verify :     repair:bool ->     B0.Cache.t ->     B0.Cache.key ->     [ `Miss_file | `Miss_index | `Ok | `Stamp_mismatch | `Unknown ] B0.result   val foreign :     ignore_keys:bool ->     B0.Cache.t -> ([ `Key | `Other ] * B0.Fpath.t) list B0.result   val fold : (B0.Cache.elt -> '-> 'a) -> B0.Cache.t -> '-> 'a   val iter : (B0.Cache.elt -> unit) -> B0.Cache.t -> unit   val path_map : B0.Cache.t -> B0.Cache.elt B0.Fpath.Map.t end