functor (G : G->
  functor
    (W : sig
           type edge = G.E.t
           type t
           val weight : edge -> t
           val compare : t -> t -> int
           val add : t -> t -> t
           val zero : t
         end->
    sig
      module H :
        sig
          type key = G.V.t
          type 'a t
          val create : int -> 'a t
          val clear : 'a t -> unit
          val reset : 'a t -> unit
          val copy : 'a t -> 'a t
          val add : 'a t -> key -> '-> unit
          val remove : 'a t -> key -> unit
          val find : 'a t -> key -> 'a
          val find_all : 'a t -> key -> 'a list
          val replace : 'a t -> key -> '-> unit
          val mem : 'a t -> key -> bool
          val iter : (key -> '-> unit) -> 'a t -> unit
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val length : 'a t -> int
          val stats : 'a t -> Hashtbl.statistics
        end
      exception NegativeCycle of Path.G.E.t list
      val all_shortest_paths : Path.G.t -> G.V.t -> W.t Path.BellmanFord.H.t
      val find_negative_cycle_from : Path.G.t -> G.V.t -> Path.G.E.t list
      val find_negative_cycle : Path.G.t -> Path.G.E.t list
    end