sig
  type kind =
      [ `Bin
      | `Doc
      | `Etc
      | `Lib
      | `Man
      | `Other of As_path.t
      | `Sbin
      | `Share
      | `Share_root
      | `Stublibs
      | `Toplevel ]
  val pp_kind : Format.formatter -> As_part_dir.kind -> unit
  val kind : [< `Dir ] As_part.t -> As_part_dir.kind
  val install : [< `Dir ] As_part.t -> bool
  type spec =
      As_part.kind As_part.t ->
      (As_path.t * As_path.rel option) list As_conf.value
  val all : As_part_dir.spec
  val all_output : As_part_dir.spec
  val all_input : As_part_dir.spec
  val file_exts : As_path.ext list -> As_part_dir.spec
  val bin : As_part_dir.spec
  val lib : As_part_dir.spec
  val doc : As_part_dir.spec
  val v :
    ?usage:As_part.usage ->
    ?exists:bool As_conf.value ->
    ?args:As_args.t ->
    ?spec:As_part_dir.spec ->
    ?install:bool ->
    As_part_dir.kind ->
    [< `Base | `Bin | `Dir | `Doc | `Lib | `Unit ] As_part.t list ->
    [< As_part.kind > `Dir ] As_part.t
end