functor (D1 : Project.Datatype.S->
  functor (D2 : Project.Datatype.S->
    functor (D3 : Project.Datatype.S->
      sig
        type t = D1.t * D2.t * D3.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
      end