sig
  type a = Params.a
  type 'a t = 'Knn.Make(Params).t
  val empty : 'a t
  val create_balanced : (a * 'a) list -> 'a t
  val add : a -> '-> 'a t -> 'a t
  val find_k_nearest : 'a t -> int -> float -> a -> (float * a * 'a) list
  val contents : 'a t -> (a * 'a) list
  val rebalance : 'a t -> 'a t
end