functor
  (G : G) (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