sig
  type 'n component = Component of 'n * 'Wto.partition | Node of 'n
  and 'n partition = 'Wto.component list
  val flatten : 'Wto.partition -> 'n list
  val fold_heads : ('-> '-> 'a) -> '-> 'Wto.partition -> 'a
  module Make :
    functor
      (Node : sig
                type t
                val equal : Wto.Make.t -> Wto.Make.t -> bool
                val hash : Wto.Make.t -> int
                val pretty : Stdlib.Format.formatter -> Wto.Make.t -> unit
              end->
      sig
        type pref = Node.t -> Node.t -> int
        val partition :
          ?pref:Wto.Make.pref ->
          init:Node.t ->
          succs:(Node.t -> Node.t list) -> Node.t Wto.partition
        val pretty_partition :
          Stdlib.Format.formatter -> Node.t Wto.partition -> unit
        val pretty_component :
          Stdlib.Format.formatter -> Node.t Wto.component -> unit
        val equal_component :
          Node.t Wto.component -> Node.t Wto.component -> bool
        val equal_partition :
          Node.t Wto.partition -> Node.t Wto.partition -> bool
      end
end