sig
  val debug : bool Pervasives.ref
  module type Tagged_type =
    sig
      type t
      val tag : Ptmap.Tagged_type.t -> int
      val equal : Ptmap.Tagged_type.t -> Ptmap.Tagged_type.t -> bool
      val pretty : Format.formatter -> Ptmap.Tagged_type.t -> unit
      module Datatype :
        sig
          type 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) -> 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
    end
  module Make :
    functor
      (X : sig
             type t
             val name : string
             val id : Ptmap.Make.t -> int
             val pretty : Format.formatter -> Ptmap.Make.t -> unit
             val equal : Ptmap.Make.t -> Ptmap.Make.t -> bool
             module Datatype :
               sig
                 type 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) -> 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
           end->
      functor (V : Tagged_type->
        functor (Initial_Values : sig val v : (X.t * V.t) list list end->
          sig
            type t
            type key = X.t
            val empty : Ptmap.Make.t
            val tag : Ptmap.Make.t -> int
            val hash_debug : Ptmap.Make.t -> int
            val equal : Ptmap.Make.t -> Ptmap.Make.t -> bool
            val is_empty : Ptmap.Make.t -> bool
            val add : Ptmap.Make.key -> V.t -> Ptmap.Make.t -> Ptmap.Make.t
            val find : Ptmap.Make.key -> Ptmap.Make.t -> V.t
            val remove : Ptmap.Make.key -> Ptmap.Make.t -> Ptmap.Make.t
            val iter : (X.t -> V.t -> unit) -> Ptmap.Make.t -> unit
            val map : (V.t -> V.t) -> Ptmap.Make.t -> Ptmap.Make.t
            val fold : (X.t -> V.t -> '-> 'a) -> Ptmap.Make.t -> '-> 'a
            val generic_merge :
              cache:string * int ->
              decide:(X.t -> V.t option -> V.t option -> V.t) ->
              Ptmap.Make.t -> Ptmap.Make.t -> Ptmap.Make.t
            val symetric_merge :
              cache:string * int ->
              decide_none:(X.t -> V.t -> V.t) ->
              decide_some:(V.t -> V.t -> V.t) ->
              Ptmap.Make.t -> Ptmap.Make.t -> Ptmap.Make.t
            val generic_is_included :
              exn ->
              cache:string * int ->
              decide_fst:(X.t -> V.t -> unit) ->
              decide_snd:(X.t -> V.t -> unit) ->
              decide_both:(V.t -> V.t -> unit) ->
              Ptmap.Make.t -> Ptmap.Make.t -> unit
            val cached_fold :
              cache:string * int ->
              f:(Ptmap.Make.key -> V.t -> 'a) ->
              joiner:('-> '-> 'a) -> empty:'-> Ptmap.Make.t -> 'a
            val cached_map :
              cache:string * int ->
              f:(Ptmap.Make.key -> V.t -> V.t) ->
              Ptmap.Make.t -> Ptmap.Make.t
            val is_singleton : Ptmap.Make.t -> (Ptmap.Make.key * V.t) option
            val min_binding : Ptmap.Make.t -> Ptmap.Make.key * V.t
            module Datatype :
              sig
                type 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) -> 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
            val pretty : Format.formatter -> Ptmap.Make.t -> unit
          end
end