sig
  type t
  type 'a value = 'Conf.value
  val const : '-> 'a value
  val app : ('-> 'b) value -> 'a value -> 'b value
  val ( $ ) : ('-> 'b) value -> 'a value -> 'b value
  val true_ : bool value
  val false_ : bool value
  val neg : bool value -> bool value
  val ( &&& ) : bool value -> bool value -> bool value
  val ( ||| ) : bool value -> bool value -> bool value
  val pick_if : bool value -> 'a value -> 'a value -> 'a value
  module Option :
    sig
      val wrap : 'a value option -> 'a option value
      val some : 'a value -> 'a option value
      val get : ?none:'a value -> 'a option value -> 'a value
    end
  type 'parser = string -> [ `Error of string | `Ok of 'a ]
  type 'a printer = Format.formatter -> '-> unit
  type 'a converter = 'parser * 'a printer
  val parser : 'a converter -> 'parser
  val printer : 'a converter -> 'a printer
  type 'a key = 'Conf.key
  val key :
    ?public:bool ->
    ?docs:string ->
    ?docv:string ->
    ?doc:string -> string -> 'a converter -> 'a value -> 'a key
  val value : 'a key -> 'a value
  type scheme = string * (string * t)
  type def = Conf.def
  val def : 'a key -> '-> def
  val defv : 'a key -> 'a value -> def
  val scheme : ?doc:string -> ?base:scheme -> string -> def list -> scheme
  val project_version : string key
  val docs_project : string
  val debug : bool key
  val profile : bool key
  val warn_error : bool key
  val test : bool key
  val doc : bool key
  val jobs : int key
  val docs_build_properties : string
  val root_dir : Path.t key
  val build_dir : Path.rel key
  val docs_build_directories : string
  val ocaml_native_tools : bool key
  val ocaml_version : (int * int * int * string option) key
  val ocaml_byte : bool key
  val ocaml_native : bool key
  val ocaml_native_dynlink : bool key
  val ocaml_js : bool key
  val ocaml_annot : bool key
  val ocaml_build_ast : bool key
  val ocaml_dumpast : string key
  val ocamlc : string key
  val ocamlopt : string key
  val js_of_ocaml : string key
  val ocamlmklib : string key
  val ocamldep : string key
  val ocamllex : string key
  val ocamlyacc : string key
  val ocaml : string key
  val ocamlrun : string key
  val ocamldebug : string key
  val ocamlprof : string key
  val ocamlfind : string key
  val opam : string key
  val opam_installer : string key
  val opam_admin : string key
  val docs_ocaml_system : string
  val c_dynlink : bool key
  val c_js : bool key
  val cc : string key
  val pkg_config : string key
  val docs_c_system : string
  val uname : string key
  val host_os : string key
  val host_arch : string key
  val host_word_size : int key
  val target_os : string key
  val target_arch : string key
  val target_word_size : int key
  val docs_machine_information : string
  val echo : string key
  val cd : string key
  val ln : string key
  val cp : string key
  val mv : string key
  val rm : string key
  val rmdir : string key
  val mkdir : string key
  val cat : string key
  val make : string key
  val docs_system_utilities : string
  val bool : bool converter
  val int : int converter
  val string : string converter
  val path : Path.t converter
  val abs_path : Path.abs converter
  val rel_path : Path.rel converter
  val enum : (string * 'a) list -> 'a converter
  val version : (int * int * int * string option) converter
  module Key :
    sig
      type t = V : 'a key -> Assemblage.Private.Conf.Key.t
      val hide_type : 'a key -> Assemblage.Private.Conf.Key.t
      val equal :
        Assemblage.Private.Conf.Key.t ->
        Assemblage.Private.Conf.Key.t -> bool
      val compare :
        Assemblage.Private.Conf.Key.t -> Assemblage.Private.Conf.Key.t -> int
      val id : 'a key -> int
      val name : 'a key -> string
      val public : 'a key -> bool
      val converter : 'a key -> 'a converter
      val default : 'a key -> 'a value
      val doc : 'a key -> string option
      val docv : 'a key -> string option
      val docs : 'a key -> string option
      module Set :
        sig
          type elt = t
          type t
          val empty : t
          val is_empty : t -> bool
          val mem : elt -> t -> bool
          val add : elt -> t -> t
          val singleton : elt -> t
          val remove : elt -> 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 : (elt -> unit) -> t -> unit
          val fold : (elt -> '-> 'a) -> t -> '-> 'a
          val for_all : (elt -> bool) -> t -> bool
          val exists : (elt -> bool) -> t -> bool
          val filter : (elt -> bool) -> t -> t
          val partition : (elt -> bool) -> t -> t * t
          val cardinal : t -> int
          val elements : t -> elt list
          val min_elt : t -> elt
          val max_elt : t -> elt
          val choose : t -> elt
          val split : elt -> t -> t * bool * t
          val find : elt -> t -> elt
          val of_list : elt list -> Assemblage.Private.Conf.Key.t
        end
      module Map :
        sig
          type key = t
          type +'a t
          val empty : 'a t
          val is_empty : 'a t -> bool
          val mem : key -> 'a t -> bool
          val add : key -> '-> 'a t -> 'a t
          val singleton : key -> '-> 'a t
          val remove : key -> 'a t -> 'a t
          val merge :
            (key -> 'a option -> 'b option -> 'c option) ->
            'a t -> 'b t -> 'c t
          val compare : ('-> '-> int) -> 'a t -> 'a t -> int
          val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
          val iter : (key -> '-> unit) -> 'a t -> unit
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val for_all : (key -> '-> bool) -> 'a t -> bool
          val exists : (key -> '-> bool) -> 'a t -> bool
          val filter : (key -> '-> bool) -> 'a t -> 'a t
          val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
          val cardinal : 'a t -> int
          val bindings : 'a t -> (key * 'a) list
          val min_binding : 'a t -> key * 'a
          val max_binding : 'a t -> key * 'a
          val choose : 'a t -> key * 'a
          val split : key -> 'a t -> 'a t * 'a option * 'a t
          val find : key -> 'a t -> 'a
          val map : ('-> 'b) -> 'a t -> 'b t
          val mapi : (key -> '-> 'b) -> 'a t -> 'b t
          val dom :
            'Assemblage.Private.Conf.Key.t ->
            Assemblage.Private.Conf.Key.Set.t
        end
    end
  val empty : Assemblage.Private.Conf.t
  val is_empty : Assemblage.Private.Conf.t -> bool
  val mem : Assemblage.Private.Conf.t -> 'a key -> bool
  val add : Assemblage.Private.Conf.t -> 'a key -> Assemblage.Private.Conf.t
  val set :
    Assemblage.Private.Conf.t ->
    'a key -> 'a value -> Assemblage.Private.Conf.t
  val rem : Assemblage.Private.Conf.t -> 'a key -> Assemblage.Private.Conf.t
  val merge :
    Assemblage.Private.Conf.t ->
    Assemblage.Private.Conf.t -> Assemblage.Private.Conf.t
  val find : Assemblage.Private.Conf.t -> 'a key -> 'a value option
  val get : Assemblage.Private.Conf.t -> 'a key -> 'a value
  val pp : Format.formatter -> Assemblage.Private.Conf.t -> unit
  val of_keys :
    Assemblage.Private.Conf.Key.Set.t -> Assemblage.Private.Conf.t
  val domain : Assemblage.Private.Conf.t -> Assemblage.Private.Conf.Key.Set.t
  val pp_key_dup : Format.formatter -> Assemblage.Private.Conf.Key.t -> unit
  val deps : 'a value -> Assemblage.Private.Conf.Key.Set.t
  val eval : Assemblage.Private.Conf.t -> 'a value -> 'a
  val doc_project : string
  val doc_build_properties : string
  val doc_build_directories : string
  val doc_ocaml_system : string
  val doc_c_system : string
  val doc_machine_information : string
  val doc_system_utilities : string
end