proc `()`[T; R](k: K[T, R]; obj: T): K[T, R]
proc `<`[T; R](x, y: K[T, R]): bool
proc `<=`[T; R](x, y: K[T, R]): bool
proc `==`[T; R](x, y: K[T, R]): bool
proc cmp_to_key[T, R](mycmp: proc (x, y: T): R): K[T, R]