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
    val spanningtree : Prim.G.t -> Prim.G.E.t list
    val spanningtree_from : Prim.G.t -> G.V.t -> Prim.G.E.t list
  end