Description
Previous ID | SR-3453 |
Radar | rdar://problem/31411212 |
Original Reporter | @airspeedswift |
Type | Improvement |
Status | Resolved |
Resolution | Done |
Additional Detail from JIRA
Votes | 0 |
Component/s | Standard Library |
Labels | Improvement, AffectsABI, swift-evolution-proposal-needed |
Assignee | @airspeedswift |
Priority | Medium |
md5: 6d5849c6136f3cb3c380bcd6362f6e00
Issue Description:
Once it is possible in the language (dependent on associated types with where clauses and recursive protocol constraints), the following rules should be enforced:
-
Iterator
should be aSequence
-
Sequence.Iterator.Element
should becomeSequence.Element
-
Sequence.SubSequence
must be aSequence
-
Sequence.SubSequence.Element
must be same type asSequence.Element
-
Collection.SubSequence.Index
should be same type asCollection.Index
-
BidirectionalCollection.SubSequence
should be aBidirectionalCollection
-
RandomAccessCollection.SubSequence
should be aRandomAccessCollection
-
RangeReplaceableCollection.SubSequence
should be aRangeReplaceableCollection
-
Collection.Indices
should be aCollection
-
Collection.Indices.Index
should be same type asCollection.Index
-
Collection.SubSequence.Indices
should be same type asCollection.Indices
Enforcing these rules will massively simplify the writing of generic collections, including several instances in the standard library. See most entries marked FIXME(ABI) with (Associated Types with where clauses) or (Recursive Protocol Constraints) for examples.