Iterable is one of the basic Scala traits. But it inherently is not immutable. It needs to change its internal state to return one element after another.
Would not it it be better to use an immutable Iterator with next() method which returns pair of values (elem, Iterator) in the same way as the List with head and tail methods is defined? In this case the Iterator could be immutable, reused many times in multi threaded environment and gains of all immutability advantages.