[swift-evolution] [Discussion] Allowing extending existentials
Slava Pestov
spestov at apple.com
Wed Feb 22 01:40:46 CST 2017
> On Feb 21, 2017, at 11:34 PM, Adrian Zubarev via swift-evolution <swift-evolution at swift.org> wrote:
>
> I’d love if we could extend the idea even further. It would be great to be able to extend the typealias type, because it can be a more constrained type (with a where clause).
>
> protocol P {
> associatedtype Q
> }
> class C {}
>
> typealias CP = C & P where Q == Int
>
> extension CP { … }
> This would make a lot of constrained extension vanish.
>
>
Once we have generalized existentials, it should be possible to make something like the above desugar into a constrained extension.
Slava
>
>
>
> --
> Adrian Zubarev
> Sent with Airmail
>
> Am 22. Februar 2017 um 08:26:33, David Hart via swift-evolution (swift-evolution at swift.org <mailto:swift-evolution at swift.org>) schrieb:
>
>> 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 {}
>>
>> On 22 Feb 2017, at 08:06, Jacob Bandes-Storch <jtbandes at gmail.com <mailto: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 <mailto: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 <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <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
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <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/7ede09f0/attachment.html>
More information about the swift-evolution
mailing list