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