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