sig
  module Vertex :
    functor
      (G_Init : sig
                  type t
                  module V : Sig.HASHABLE
                  val fold_vertex :
                    (V.t -> '-> 'a) -> Gmap.Vertex.t -> '-> 'a
                end->
      functor
        (G_Dest : sig
                    type t
                    type vertex
                    val empty : unit -> Gmap.Vertex.t
                    val add_vertex :
                      Gmap.Vertex.t -> Gmap.Vertex.vertex -> Gmap.Vertex.t
                  end->
        sig
          val map : (G_Init.V.t -> G_Dest.vertex) -> G_Init.t -> G_Dest.t
        end
  module Edge :
    functor
      (G_Init : sig
                  type t
                  module E : Sig.HASHABLE
                  val fold_edges_e :
                    (E.t -> '-> 'a) -> Gmap.Edge.t -> '-> 'a
                end->
      functor
        (G_Dest : sig
                    type t
                    type edge
                    val empty : unit -> Gmap.Edge.t
                    val add_edge_e :
                      Gmap.Edge.t -> Gmap.Edge.edge -> Gmap.Edge.t
                  end->
        sig val map : (G_Init.E.t -> G_Dest.edge) -> G_Init.t -> G_Dest.t end
end