Вот это не всегда. Если мне нужен доступ по индексу и я хочу его оптимзирировать, я вполне могу проверить не является ли Iterable листом. А вот если я мутировать эту штуку начинаю - это нарушение контракта.
Наброшу: если хотите доступ по индексу, то и функцию заставляйте принимать Collection, а не Iterable, чтобы грязью занимался вызывающий метод