functor
  (P : sig val shortname : string end) (X : sig
                                              type t
                                              val ty : t Type.t
                                              val name : string
                                              val descr : t Descr.t
                                              val packed_descr :
                                                Structural_descr.pack
                                              val reprs : t list
                                              val equal : t -> t -> bool
                                              val compare : t -> t -> int
                                              val hash : t -> int
                                              val pretty_code :
                                                Format.formatter -> t -> unit
                                              val internal_pretty_code :
                                                Type.precedence ->
                                                Format.formatter -> t -> unit
                                              val pretty :
                                                Format.formatter -> t -> unit
                                              val varname : t -> string
                                              val mem_project :
                                                (Project_skeleton.t -> bool) ->
                                                t -> bool
                                              val copy : t -> t
                                              val default : unit -> t
                                              val option_name : string
                                              val functor_name : string
                                            end->
  sig
    type t = X.t
    val set : t -> unit
    val add_set_hook : (t -> t -> unit) -> unit
    val add_update_hook : (t -> t -> unit) -> unit
    val get : unit -> t
    val clear : unit -> unit
    val is_default : unit -> bool
    val option_name : string
    val print_help : Format.formatter -> unit
    val self : State.t
    val name : string
    val mark_as_computed : ?project:Project.t -> unit -> unit
    val is_computed : ?project:Project.t -> unit -> bool
    module Datatype : Datatype.S
    val add_hook_on_update : (Datatype.t -> unit) -> unit
    val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
    val equal : t -> t -> bool
    val add_aliases : string list -> unit
    val is_set : unit -> bool
    val unsafe_set : t -> unit
    module Is_set : State_builder.S
    val group : Cmdline.Group.t
    val stage : Cmdline.stage
    val is_visible : bool
    val is_dynamic : bool
    val register_dynamic :
      string -> 'arg Type.t -> 'ret Type.t -> ('arg -> 'ret) -> 'arg -> 'ret
    val gen_journalized :
      string -> 'arg Type.t -> ('arg -> unit) -> 'arg -> unit
  end