Как говорит Натан Дэвис, вы не можете делать это «извне», потому что этот материал основан на интерфейсах, а не на протоколах. Для OrderedSet было бы разумно реализовать Indexed; Должно быть, я просто не обратил внимания на этот интерфейс.
С другой стороны, ваша реализация nth очень неэффективна: вы не хотите создавать вектор длины N только для того, чтобы искать в нем один элемент. Вместо этого вы хотите позвонить в get
, что делает то же самое, что и nth
.
Edit: оглянувшись через код еще раз, я вижу, что nth
не так легко правильно реализовать, потому что существование disj делает его трудно быстро сказать, сколько элементов были исключены из множество где. Я не думаю, что эффективная реализация для nth
действительно может существовать для этой структуры данных, если вы не удалите возможность использования disj
. Таким образом, я, вероятно, не соглашусь с запросом на вытягивание, реализующим nth
, если вы не найдете что-то действительно умное, но не стесняйтесь использовать fork ordered
и добавьте его в свою собственную вилку, если вам не нужна поддержка disj
.