On Fri, Apr 29, 2016 at 4:02 AM, David Hart <da...@hartbit.com> wrote: > But Collection has to have an extension which explicitly mentions > IndexingIterator: > > extension Collection where Iterator == IndexingIterator<Self> { > /// Returns an iterator over the elements of the collection. > public func makeIterator() -> IndexingIterator<Self> { > return IndexingIterator(_elements: self) > } > } > > And Array, for example, has to be explicit: > > public typealias Iterator = IndexingIterator<${Self}>
This might be a workaround for a compiler bug (that it couldn't infer the type). > So I still don’t see how defining: > > associatedtype Iterator : IteratorProtocol = IndexingIterator<Self> > > has created any default behaviour. > > When you say "The fact that the compiler does not allow to use the inferred > ‘Foo' type actually looks like a bug to me.”, could you give me an example > of how you would have imagined this default behaviour to work in the case of > Array? Would have expected Array not to have to define its typealias? Right, I would expect Array to not need to mention Iterator at all in its definition. Take a look at stdlib/public/core/CollectionOfOne.swift. It does not define SubSequence or Indices. Dmitri -- main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if (j){printf("%d\n",i);}}} /*Dmitri Gribenko <griboz...@gmail.com>*/ _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution