functor (G : G->
  functor (W : sig type t = G.E.label val compare : t -> t -> int end->
    functor
      (UF : sig
              type elt = G.V.t
              type t
              val init : elt list -> t
              val find : elt -> t -> elt
              val union : elt -> elt -> t -> unit
            end->
      sig val spanningtree : Kruskal.G.t -> Kruskal.G.E.t list end