sig
  module P :
    functor (Gf : Sig.G->
      functor (Gt : Sig.P->
        functor
          (M : sig
                 val vertex : Gt.t -> Gf.V.t -> Gt.V.t * Gt.t
                 val edge : Gt.t -> Gt.V.t -> Gt.V.t -> Gt.t
               end->
          sig val copy : Gf.t -> Gt.t end
  module I :
    functor (Gf : Sig.G->
      functor (Gt : Sig.I->
        functor
          (M : sig
                 val vertex : Gt.t -> Gf.V.t -> Gt.V.t
                 val edge : Gt.t -> Gt.V.t -> Gt.V.t -> unit
               end->
          sig val copy : Gf.t -> Gt.t end
end