@typecheck_method(ordered_collection=IR, elem=IR)
def copy(self, ordered_collection, elem):
    new_instance = self.__class__
    return new_instance(ordered_collection, elem, self.on_key)
@typecheck_method(ordered_collection=IR, elem=IR)
def copy(self, ordered_collection, elem):
    new_instance = self.__class__
    return new_instance(ordered_collection, elem, self.on_key)