functor
  (T : sig
         type t
         val dummy : Kind.Make.t
         val name : string
         val kind_name : Kind.Make.t -> string
       end->
  sig
    type t
    val dummy : Kind.Make.t
    val equal : Kind.Make.t -> Kind.Make.t -> bool
    val compare : Kind.Make.t -> Kind.Make.t -> int
    val hash : Kind.Make.t -> int
    module Selection :
      sig
        type kind = t
        type t
        val ty : t Type.t
        val empty : t
        val is_empty : t -> bool
        val add : kind -> how -> t -> t
        val singleton : kind -> how -> t
        val remove : kind -> t -> t
        val iter : (kind -> how -> unit) -> t -> unit
        val fold : (kind -> how -> '-> 'a) -> t -> '-> 'a
      end
    val create : T.t -> Kind.Make.t list -> Kind.Make.t
    val value : Kind.Make.t -> T.t
    val get_from_name : string -> Kind.Make.t
    exception DependencyAlreadyExists of string * string
    val add_dependency : Kind.Make.t -> Kind.Make.t -> unit
    val iter : (T.t -> '-> unit) -> '-> unit
    val apply_in_order :
      Kind.Make.Selection.t ->
      Kind.Make.Selection.t -> (Kind.Make.t -> '-> 'a) -> '-> 'a
    val iter_in_order :
      Kind.Make.Selection.t ->
      Kind.Make.Selection.t -> (T.t -> '-> unit) -> '-> unit
    val full_iter_in_order :
      Kind.Make.Selection.t ->
      Kind.Make.Selection.t -> (T.t -> '-> unit) -> '-> unit
    val fold_in_order :
      Kind.Make.Selection.t ->
      Kind.Make.Selection.t -> (T.t -> '-> 'a) -> '-> 'a
    val number_of_applicants :
      Kind.Make.Selection.t -> Kind.Make.Selection.t -> int option
    val full_number_of_applicants :
      Kind.Make.Selection.t -> Kind.Make.Selection.t -> int option
    module Dynamic :
      sig
        type kind = Kind.Make.t
        type graph
        type t = Kind.Make.Dynamic.graph Pervasives.ref
        val create : unit -> Kind.Make.Dynamic.t
        val create_graph : unit -> Kind.Make.Dynamic.graph
        val clear_graph : Kind.Make.Dynamic.graph -> unit
        val add_kind :
          Kind.Make.Dynamic.t ->
          T.t -> Kind.Make.Dynamic.kind list -> Kind.Make.Dynamic.kind
        val remove_kind :
          Kind.Make.Dynamic.t -> Kind.Make.Dynamic.kind -> unit
        val add_dependency :
          Kind.Make.Dynamic.t ->
          Kind.Make.Dynamic.kind -> Kind.Make.Dynamic.kind -> unit
        type marshalled_graph
        val marshal :
          Kind.Make.Dynamic.graph -> Kind.Make.Dynamic.marshalled_graph
        val unmarshal :
          (string -> T.t) ->
          (Kind.Make.Dynamic.kind -> unit) ->
          Kind.Make.Dynamic.marshalled_graph -> Kind.Make.Dynamic.graph
        val before_load : unit -> unit
        val after_load : unit -> unit
      end
    val dump_dependencies :
      ?only:Kind.Make.Selection.t ->
      ?except:Kind.Make.Selection.t -> string -> unit
    val dump_dynamic_dependencies :
      ?only:Kind.Make.Selection.t ->
      ?except:Kind.Make.Selection.t -> string -> unit
  end