[swift-evolution] Enhanced existential types proposal discussion
Matthew Johnson
matthew at anandabits.com
Tue May 24 07:09:36 CDT 2016
Sent from my iPad
On May 23, 2016, at 9:52 PM, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:
>> One initial bit of feedback - I believe if you have existential types, I believe you can define Sequence Element directly, rather than with a type alias. e.g.
>>
>> protocol Sequence {
>> associatedtype Element
>> associatedtype Iterator: any<IteratorProtocol where IteratorProtocol.Element==Element>
>> associatedtype SubSequence: any<Sequence where Sequence.Element == Element>
>> …
>> }
>
> That's not really the same thing. Any<IteratorProtocol> is an existential, not a protocol. It's basically an automatically-generated version of our current `AnyIterator<T>` type (though with some additional flexibility). It can't appear on the right side of a `:`, any more than AnyIterator could.
After this proposal you should be able to use these existentials anywhere you can place a constraint, so it would work. You can do this with the protocol composition operator today and the future existential is just an extension of that capability.
>
> What *would* work is allowing `where` clauses on associated types:
>
>> protocol Sequence {
>> associatedtype Element
>> associatedtype Iterator: IteratorProtocol where Iterator.Element==Element
>> associatedtype SubSequence: Sequence where SubSequence.Element == Element
>> …
>> }
>
> I believe this is part of the generics manifesto.
>
> --
> Brent Royal-Gordon
> Architechies
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
More information about the swift-evolution
mailing list