functor (M : KnnParams->
  sig
    type a = M.a
    type +'a 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