functor (Set : SET->
  functor
    (Data : sig
              type t = Set.elt
              val rehash : t -> 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) -> ?physical_hash:(t -> int) -> unit -> unit
              val is_comparable_set : unit -> bool
              val hash : t -> int
              val physical_hash : t -> int
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val contain_project : (Project.project -> t -> bool) option ref
            end->
    functor (Info : Signature.NAME_DPDS->
      sig
        val self : Project.Computation.t
        val select :
          Kind.how ->
          Project.Computation.selection -> Project.Computation.selection
        val depend : Project.Computation.t -> unit
        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 name : string
        type elt = Data.t
        val add : elt -> unit
        val mem : elt -> bool
        val is_empty : unit -> bool
        val fold : (elt -> '-> 'a) -> '-> 'a
        val iter : (elt -> unit) -> unit
      end