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
              and t
              val init : Kruskal.UNIONFIND.elt list -> Kruskal.UNIONFIND.t
              val find :
                Kruskal.UNIONFIND.elt ->
                Kruskal.UNIONFIND.t -> Kruskal.UNIONFIND.elt
              val union :
                Kruskal.UNIONFIND.elt ->
                Kruskal.UNIONFIND.elt -> Kruskal.UNIONFIND.t -> unit
            end->
      sig val spanningtree : Kruskal.G.t -> Kruskal.G.E.t list end