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