functor (X : Parameter_input_with_arg->
  functor
    (V : sig
           type t
           val descr : Unmarshal.t
           val copy : t -> t
           val name : string
           val register_comparable :
             ?compare:(t -> t -> int) ->
             ?equal:(t -> t -> bool) -> ?hash:(t -> int) -> unit -> unit
           val is_comparable_set : unit -> bool
           val hash : t -> int
           val equal : t -> t -> bool
           val compare : t -> t -> int
           val mem_project :
             ((Project.project -> bool) -> t -> bool) option ref
           val parse : string -> string * t
           val no_binding : string -> t
         end->
    sig
      type t = Cilutil.StringSet.t
      val set : t -> unit
      val add_set_hook : (t -> t -> unit) -> unit
      val get : unit -> t
      val clear : unit -> unit
      val is_default : unit -> bool
      val is_set : unit -> bool
      val self : Project.Computation.t
      val select :
        Kind.how ->
        Project.Computation.selection -> Project.Computation.selection
      val depend : Project.Computation.t -> unit
      val name : string
      val mark_as_computed : ?project:Project.project -> unit -> unit
      val is_computed : ?project:Project.project -> unit -> bool
      val do_not_save : unit -> unit
      module Datatype : Project.Datatype.S
      val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
      val equal : t -> t -> bool
      val unsafe_set : t -> unit
      val add_alias : string list -> unit
      val add : string -> unit
      val remove : string -> unit
      val is_empty : unit -> bool
      val get_set : ?sep:string -> unit -> string
      val iter : (string -> unit) -> unit
      type value = V.t
      val find : string -> value
    end