[swift-evolution] [Discussion] Allowing extending existentials

Jacob Bandes-Storch jtbandes at gmail.com
Wed Feb 22 01:06:24 CST 2017


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170221/2dd9fe76/attachment.html>


More information about the swift-evolution mailing list