[swift-evolution] [Discussion] Allowing extending existentials

Adrian Zubarev adrian.zubarev at devandartist.com
Wed Feb 22 01:34:08 CST 2017


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.



-- 
Adrian Zubarev
Sent with Airmail

Am 22. Februar 2017 um 08:26:33, David Hart via swift-evolution (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> 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/20170222/b2ecc703/attachment.html>


More information about the swift-evolution mailing list