sig
  type kind = [ `C | `OCaml | `OCaml_toplevel ]
  val pp_kind : Format.formatter -> Assemblage.Bin.kind -> unit
  val kind : [< `Bin ] Assemblage.part -> Assemblage.Bin.kind
  val byte : [< `Bin ] Assemblage.part -> bool
  val native : [< `Bin ] Assemblage.part -> bool
  val js : [< `Bin ] Assemblage.part -> bool
  val ocaml :
    [< Assemblage.part_kind ] Assemblage.part ->
    [< Assemblage.part_kind > `Bin ] Assemblage.part option
  val ocaml_toplevel :
    [< Assemblage.part_kind ] Assemblage.part ->
    [< Assemblage.part_kind > `Bin ] Assemblage.part option
  val c :
    [< Assemblage.part_kind ] Assemblage.part ->
    [< Assemblage.part_kind > `Bin ] Assemblage.part option
  val v :
    ?usage:Assemblage.Part.usage ->
    ?exists:bool Assemblage.Conf.value ->
    ?args:Assemblage.Args.t ->
    ?byte:bool ->
    ?native:bool ->
    ?js:bool ->
    string ->
    Assemblage.Bin.kind ->
    [< `Lib | `Pkg | `Unit ] Assemblage.part list ->
    [< Assemblage.part_kind > `Bin ] Assemblage.part
  val to_cmd :
    ?ext:Assemblage.Path.ext ->
    [< `Bin ] Assemblage.part -> Assemblage.Acmd.cmd Assemblage.Conf.value
  val to_cmd_path :
    ?abs:bool ->
    ?ext:Assemblage.Path.ext ->
    [< `Bin ] Assemblage.part -> Assemblage.Path.t Assemblage.Conf.value
  val exists :
    ?ext:Assemblage.Path.ext ->
    [< `Bin ] Assemblage.part -> bool Assemblage.Conf.value
  val gen :
    ?usage:Assemblage.Part.usage ->
    ?exists:bool Assemblage.Conf.value ->
    ?args:Assemblage.Args.t ->
    ?dir:Assemblage.Path.t Assemblage.Conf.value ->
    ?name:string ->
    ?ext:Assemblage.Path.ext ->
    ?stdin:Assemblage.Path.t Assemblage.Conf.value ->
    ?stdout:Assemblage.Path.t Assemblage.Conf.value ->
    ?stderr:Assemblage.Path.t Assemblage.Conf.value ->
    [< `Bin ] Assemblage.Part.t ->
    string list Assemblage.Conf.value ->
    [< Assemblage.part_kind > `Base ] Assemblage.Part.t
end