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