module Assoc : sig
  type t = (string * string list) list
end

module Path : sig
  type t = private string list

  val of_string : string -> (t, [> `Msg of string ]) result
  val of_string_exn : string -> t
  val pp : Format.formatter -> t -> unit
end

type t

val pp : Format.formatter -> t -> unit
val parser : string -> (t list, [> `Msg of string ]) result

val search :
     roots:string list
  -> ?predicates:string list
  -> Path.t
  -> ((string * Assoc.t) list, [> `Msg of string ]) result

val ancestors :
     roots:string list
  -> ?predicates:string list
  -> Path.t
  -> ((Path.t * string * Assoc.t) list, [> `Msg of string ]) result

val to_artifacts :
  (string * Assoc.t) list -> (Objinfo.t list, [> `Msg of string ]) result

val setup : Fpath.t list Cmdliner.Term.t

(**/**)

val to_dir_path : string -> string