[swift-evolution] [Discussion] Allowing extending existentials

Douglas Gregor dgregor at apple.com
Wed Feb 22 01:36:10 CST 2017



Sent from my iPhone

> On Feb 21, 2017, at 11:25 PM, David Hart via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Yes, but it's not very discoverable. Plus, if the subclass existentials proposal is accepted, it would actually allow us to do:
> 
> class C {}
> extension C & P1 {}

... which is 

extension P1 where Self: C1 {}


Actually extending semantics (e.g. to extend Any or AnyObject) is a very large project that's out of scope. Without that, this is a small bit of syntactic sugar. 

  - Doug

> 
>> On 22 Feb 2017, at 08:06, Jacob Bandes-Storch <jtbandes at gmail.com> wrote:
>> 
>> This works today:
>> 
>> protocol P1{}
>> protocol P2{}
>> 
>> extension P1 where Self: P2 {
>>     func foo() {}
>> }
>> 
>> func bar(x: P1 & P2) {
>>     x.foo()
>> }
>> 
>> 
>>> On Tue, Feb 21, 2017 at 10:53 PM, David Hart via swift-evolution <swift-evolution at swift.org> wrote:
>>> Hello list,
>>> 
>>> Found out yesterday that you can’t extend all existentials in Swift:
>>> 
>>> protocol P1 {}
>>> extension P1 {}
>>> // works as expected
>>> 
>>> protocol P2 {}
>>> extension P1 & P2 {}
>>> // error: non-nominal type 'P1 & P2' cannot be extended
>>> 
>>> extension Any {}
>>> // error: non-nominal type 'Any' cannot be extended
>>> 
>>> extension AnyObject {}
>>> // error: 'AnyObject' protocol cannot be extended
>>> 
>>> I’d like to write a proposal to lift some of those restrictions. But the question is: which should be lifted? P1 & P2 seems like an obvious case. But what about Any and AnyObject? Is there a design reason that we shouldn’t allow it?
>>> 
>>> David.
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> 
>> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170221/28df7ab3/attachment.html>


More information about the swift-evolution mailing list