sig
  module Copy :
    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
end