<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 14, 2017, at 3:57 AM, Slava Pestov via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Feb 14, 2017, at 1:30 AM, Adrian Zubarev &lt;<a href="mailto:adrian.zubarev@devandartist.com" class="">adrian.zubarev@devandartist.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><p style="margin: 15px 0px; -webkit-margin-before: 0px;" class="">Why can’t we completely ban this?</p><pre style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;" class=""><code class="swift" style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;">protocol A {}
protocol B {}
typealias AB = A &amp; B

protocol C : AB {} // Allowed, but could be also banned

protocol D : A &amp; B {} // Error
</code></pre><div style="margin: 15px 0px;" class=""><br class="webkit-block-placeholder"></div></div></div></blockquote><div class=""><br class=""></div>I didn’t even know the last one there was banned. /me hangs head in shame.</div><div class=""><br class=""></div><div class="">I think either both should be supported, or neither one should be supported. I’m leaning toward the former :-)</div></div></div></blockquote><div><br class=""></div><div>I agree.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">However note that unlike protocols that inherit from classes, this does not create any conceptual difficulties in the language; it’s merely a syntactic quirk. I’m more concerned about banning protocols that inherit from typealiases that contain classes.</div></div></div></blockquote><div><br class=""></div><div>In my mind, allowing a protocol to “inherit” from a class would be the same as a supertype requirements. &nbsp;I imagine the following to be roughly equivalent in meaning:</div><div><br class=""></div><div>protocol Foo {}</div><div>func takesFoo&lt;F: Foo where F: MyClass&gt;(foo: F) {}</div><div><div><br class=""></div><div><br class=""></div><div>protocol Foo: MyClass {}</div><div>func takesFoo&lt;F: Foo&gt;(foo: F) {}</div></div><div><br class=""></div><div>All we’re doing is moving the supertype constraint to the protocol itself rather than requiring it to be repeated everywhere the protocol is used. &nbsp;What conceptual difficulty is involved in allowing this? &nbsp;Maybe I’m missing something, but I just don’t see it.</div><div><br class=""></div><div>A second example that builds on the subtype existential syntax:</div><div><br class=""></div><div><div>protocol Foo {}</div><div>typealias Bar = MyClass &amp; Bar</div><div><br class=""></div><div>func takesBar&lt;B: Bar&gt;(bar: B) {}</div></div><div><div><br class=""></div><div>A third example using the typealias in creating a new nominal protocol:</div><div><br class=""></div><div>protocol Three: Bar {}</div><div><br class=""></div><div>would be equivalent to&nbsp;</div><div><br class=""></div><div>protocol Three: MyClass, Foo {}</div><div><br class=""></div><div>If we don’t allow this we are not preventing users from adding supertype constraints to a protocol. &nbsp;We’re just requiring them to expose a protocol *without* the supertype requirement and use `&amp;` (maybe with a typealias) everywhere they actually mention the protocol in their interface. &nbsp;This seems a little bit fragile and boilerplate-y. &nbsp;What is the downside of allowing a protocol that is intended to always have a supertype constraint from stating it directly in the declaration of the protocol?</div><div><br class=""></div></div><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Slava</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="bloop_original_html" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><br class=""></div><br class=""><div id="bloop_sign_1487064559862729984" class="bloop_sign"><div style="font-family: helvetica, arial; font-size: 13px;" class="">--&nbsp;<br class="">Adrian Zubarev<br class="">Sent with Airmail</div></div><br class=""><p class="airmail_on" style="margin: 15px 0px;">Am 14. Februar 2017 um 10:25:43, Slava Pestov via swift-evolution (<a href="mailto:swift-evolution@swift.org" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">swift-evolution@swift.org</a>) schrieb:</p><blockquote type="cite" class="clean_bq" style="margin: 15px 0px;"><span style="margin-top: 0px; margin-bottom: 0px;" class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px;">On Feb 12, 2017, at 12:32 PM, David Hart via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="" style="margin-bottom: 0px;"><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Hi Matthew,<div class=""><br class=""></div><div class="">Your arguments made sense to me. I modified the proposal to choose strategy number 3: deprecating and removing<span class="Apple-converted-space">&nbsp;</span><b class="">class</b><span class="Apple-converted-space">&nbsp;</span>over several versions to favour<span class="Apple-converted-space">&nbsp;</span><b class="">AnyObject</b>. Mind having another proof read?</div><div class=""><br class=""></div><div class=""><a href="https://github.com/hartbit/swift-evolution/blob/subclass-existentials/proposals/XXXX-subclass-existentials.md" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">https://github.com/hartbit/swift-evolution/blob/subclass-existentials/proposals/XXXX-subclass-existentials.md</a></div><div class=""><br class=""></div><div class="">Anybody has counter arguments?</div><div class=""><br class=""></div><div class=""><h1 class="" style="font-weight: bold; color: rgb(51, 51, 51); font-size: 28pt; box-sizing: border-box; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; line-height: 1.25; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255); margin-top: 0px !important;">Class and Subtype existentials</h1><ul class="" style="margin: 0px 0px 16px; box-sizing: border-box; padding-left: 2em; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="margin: 15px 0px; box-sizing: border-box;">Proposal:&nbsp;<a href="https://github.com/hartbit/swift-evolution/blob/subclass-existentials/proposals/XXXX-subclass-existentials.md" class="" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects;">SE-XXXX</a></li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Authors:&nbsp;<a href="http://github.com/hartbit/" class="" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects;">David Hart</a>,&nbsp;<a href="http://github.com/austinzheng" class="" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects;">Austin Zheng</a></li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Review Manager: TBD</li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Status: TBD</li></ul><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-introduction" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#introduction" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Introduction</h2><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">This proposal brings more expressive power to the type system by allowing Swift to represent existentials of classes and subtypes which conform to protocols.</p><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-motivation" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#motivation" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Motivation</h2><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Currently, the only existentials which can be represented in Swift are conformances to a set of protocols, using the&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">&amp;</code>protocol composition syntax:</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;">Protocol1 <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> Protocol2</pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">On the other hand, Objective-C is capable of expressing existentials of classes and subclasses conforming to protocols with the following syntax:</p><div class="highlight highlight-source-objc" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">id</span>&lt;Protocol1, Protocol2&gt;
Base&lt;Protocol&gt;*</pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">We propose to provide similar expressive power to Swift, which will also improve the bridging of those types from Objective-C.</p><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-proposed-solution" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#proposed-solution" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Proposed solution</h2><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">The proposal keeps the existing&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">&amp;</code>&nbsp;syntax but allows the first element, and only the first, to be either the&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>keyword or of class type. The equivalent to the above Objective-C types would look like this:</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">AnyObject</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> Protocol1 <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> Protocol2
<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Base</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> Protocol</pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">As in Objective-C, the first line is an existential of classes which conform to&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">Protocol1</code>&nbsp;and&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">Protocol2</code>, and the second line is an existential of subtypes of&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">Base</code>&nbsp;which conform to&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">Protocol</code>.</p><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Here are the new proposed rules for what is valid in a existential conjunction syntax:</p><h3 class="" style="font-weight: bold; font-size: 1.25em; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-1-the-first-element-in-the-protocol-composition-syntax-can-be-the-anyobject-keyword-to-enforce-a-class-constraint" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#1-the-first-element-in-the-protocol-composition-syntax-can-be-the-anyobject-keyword-to-enforce-a-class-constraint" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>1. The first element in the protocol composition syntax can be the&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: inherit; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>&nbsp;keyword to enforce a class constraint:</h3><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">protocol</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">P</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">struct</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">S</span> : <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);">P </span>{}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">C</span> : <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);">P </span>{}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> t<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> P <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">AnyObject</span> <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiler error: AnyObject requirement must be in first position</span>
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> u<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">AnyObject</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">S</span>() <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiler error: S is not of class type</span>
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> v<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">AnyObject</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">C</span>() <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiles successfully</span></pre></div><h3 class="" style="font-weight: bold; font-size: 1.25em; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-2-the-first-element-in-the-protocol-composition-syntax-can-be-a-class-type-to-enforce-the-existential-to-be-a-subtype-of-the-class" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#2-the-first-element-in-the-protocol-composition-syntax-can-be-a-class-type-to-enforce-the-existential-to-be-a-subtype-of-the-class" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>2. The first element in the protocol composition syntax can be a class type to enforce the existential to be a subtype of the class:</h3><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">protocol</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">P</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">struct</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">S</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">C</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">D</span> : <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);">P </span>{}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">E</span> : <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);">C</span>, <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);">P </span>{}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> t<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> P <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> C <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiler error: subclass constraint must be in first position</span>
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> u<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> S <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiler error: S is not of class type</span>
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> v<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> C <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">D</span>() <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiler error: D is not a subtype of C</span>
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> w<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> C <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">E</span>() <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Compiles successfully</span></pre></div><h3 class="" style="font-weight: bold; font-size: 1.25em; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-3-when-a-protocol-composition-type-contains-a-typealias-the-validity-of-the-type-is-determined-using-the-following-steps" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#3-when-a-protocol-composition-type-contains-a-typealias-the-validity-of-the-type-is-determined-using-the-following-steps" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>3. When a protocol composition type contains a typealias, the validity of the type is determined using the following steps:</h3><ul class="" style="margin: 0px 0px 16px; box-sizing: border-box; padding-left: 2em; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="margin: 15px 0px; box-sizing: border-box;">Expand the typealias</li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Normalize the type by removing duplicate constraints and replacing less specific constraints by more specific constraints (a&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;constraint is less specific than a class type constraint, which is less specific than a constraint of a subclass of that class).</li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Check that the type does not contain two class-type constraints</li></ul></div></div></div></blockquote><div class=""><br class=""></div>You could generalize this and instead say that if the type contains two class-type constraints, the resulting existential type is the common base class of the two classes, or AnyObject if they do not share a common base class.</div><div class=""><br class=""></div><div class="">Also, I’d like to see some discussion about class-constrained existentials appearing in the inheritance clause of a protocol. IMHO, we should ban this:</div><div class=""><br class=""></div><div class="">typealias MyType = SomeClass &amp; SomeProtocol</div><div class=""><br class=""></div><div class="">protocol SomeOtherProtocol : MyType {}</div><div class=""><br class=""></div><div class="">Slava</div><div class=""><br class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">C</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">D</span> : <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);">C </span>{}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">E</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">protocol</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">P1</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">protocol</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">P2</span> {}
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA1</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">AnyObject</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P1
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA2</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">AnyObject</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P2
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA3</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> C <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P2
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA4</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> D <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P2
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA5</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> E <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> P2

<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA5</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> TA1 <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> TA2
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Expansion: typealias TA5 = AnyObject &amp; P1 &amp; AnyObject &amp; P2</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Normalization: typealias TA5 = AnyObject &amp; P1 &amp; P2 </span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> TA5 is valid</span>

<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA6</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> TA1 <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> TA3
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Expansion: typealias TA6 = AnyObject &amp; P1 &amp; C &amp; P2 </span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Normalization (AnyObject &lt; C): typealias TA6 = C &amp; P1 &amp; P2 </span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> TA6 is valid</span>

<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA7</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> TA3 <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> TA4
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Expansion: typealias TA7 = C &amp; P2 &amp; D &amp; P2</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Normalization (C &lt; D): typealias TA7 = D &amp; P2</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> TA7 is valid</span>

<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">typealias</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">TA8</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> TA4 <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> TA5
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Expansion: typealias TA8 = D &amp; P2 &amp; E &amp; P2</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> Normalization: typealias TA8 = D &amp; E &amp; P2</span>
<span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="pl-c" style="box-sizing: border-box;">//</span> TA8 is invalid because the D and E constraints are incompatible</span></pre></div><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-class-and-anyobject" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#class-and-anyobject" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a><code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: inherit; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;and&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: inherit; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code></h2><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">This proposal merges the concepts of&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;and&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>, which now have the same meaning: they represent an existential for classes. To get rid of the duplication, we suggest only keeping&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>&nbsp;around. To reduce source-breakage to a minimum,&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;could be redefined as&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">typealias class = AnyObject</code>&nbsp;and give a deprecation warning on&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;for the first version of Swift this proposal is implemented in. Later,&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;could be removed in a subsequent version of Swift.</p><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-source-compatibility" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#source-compatibility" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Source compatibility</h2><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">This change will not break Swift 3 compability mode because Objective-C types will continue to be imported as before. But in Swift 4 mode, all types bridged from Objective-C which use the equivalent Objective-C existential syntax could break code which does not meet the new protocol requirements. For example, the following Objective-C code:</p><div class="highlight highlight-source-objc" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@interface</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">MyViewController</span>
- (<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">void</span>)<span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">setup</span><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">:</span>(nonnull UIViewController&lt;UITableViewDataSource,UITableViewDelegate&gt;*)<span class="pl-smi" style="box-sizing: border-box;">tableViewController</span>;
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">@end</span></pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">is imported into Swift-3 mode as:</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">MyViewController</span> {
    <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">setup</span>(<span class="pl-smi" style="box-sizing: border-box;"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">tableViewController</span></span>: UIViewController) {}
}</pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">which allows calling the function with an invalid parameter:</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">let</span> myViewController<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">MyViewController</span>()
myViewController.<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">setup</span>(<span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">UIViewController</span>())</pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">The previous code continues to compile but still crashs if the Objective-C code calls a method of&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">UITableViewDataSource</code>&nbsp;or&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">UITableViewDelegate</code>. But if this proposal is accepted and implemented as-is, the Objective-C code will be imported in Swift 4 mode as:</p><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">MyViewController</span> {
    <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">setup</span>(<span class="pl-smi" style="box-sizing: border-box;"><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">tableViewController</span></span>: UIViewController <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> UITableViewDataSource <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">&amp;</span> UITableViewDelegate) {}
}</pre></div><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">That would then cause the Swift code run in version 4 mode to fail to compile with an error which states that&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">UIViewController</code>&nbsp;does not conform to the&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">UITableViewDataSource</code>&nbsp;and&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">UITableViewDelegate</code>&nbsp;protocols.</p><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-alternatives-considered" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#alternatives-considered" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Alternatives considered</h2><p class="" style="margin: 0px 0px 16px; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">An alternative solution to the&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>/<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>&nbsp;duplication was to keep both, redefine&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>&nbsp;as&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">typealias AnyObject = class</code>&nbsp;and favor the latter when used as a type name.</p><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-acknowledgements" class="anchor" href="https://github.com/hartbit/swift-evolution/tree/subclass-existentials#acknowledgements" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Acknowledgements</h2><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;">Thanks to&nbsp;<a href="http://github.com/austinzheng" class="" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects;">Austin Zheng</a>&nbsp;and&nbsp;<a href="https://github.com/anandabits" class="" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects;">Matthew Johnson</a>&nbsp;who brought a lot of attention to existentials in this mailing-list and from whom most of the ideas in the proposal come from.</div></div><div class=""><br class=""><div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px;">On 9 Feb 2017, at 21:50, Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">matthew@anandabits.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="" style="margin-bottom: 0px;"><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br class=""><div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px;">On Feb 9, 2017, at 2:44 PM, David Hart &lt;<a href="mailto:david@hartbit.com" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">david@hartbit.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="" style="margin-bottom: 0px;"><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class="Apple-interchange-newline">On 9 Feb 2017, at 20:43, Matthew Johnson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" class="" style="margin: 15px 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><div class=""><br class=""><br class="">Sent from my iPad</div><div class=""><br class="">On Feb 9, 2017, at 1:30 PM, Hooman Mehr via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><br class=""><div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px;">On Feb 9, 2017, at 10:47 AM, Joe Groff via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt; wrote:</div><div class="" style="margin-bottom: 0px;"><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px;">On Feb 9, 2017, at 4:26 AM, Step Christopher via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt; wrote:</div><div class="" style="margin-bottom: 0px;"><div dir="auto" class=""><div class=""></div><div class=""><div class=""></div><div class="">Looks good. Minor comments below:</div>The typealias 'T5' is repeated as both an initial composition, and as a demonstration of combining typealiases.&nbsp;<div class=""><br class=""></div><div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><pre class="" style="margin: 0px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><span class="" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">This proposal merges the concepts of </span><code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 0px; margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code><span class="" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"> and </span><code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 0px; margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code><span class="" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">, which now have the same meaning: they represent an existential for classes. They are four solutions to this dilemna:</span></pre></div><ol class="" style="margin: 0px 0px 16px; box-sizing: border-box; padding-left: 2em; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="margin: 15px 0px; box-sizing: border-box;">Do nothing.</li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Replace all uses of&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>&nbsp;by&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>, breaking source compatibility.</li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Replace all uses of&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">class</code>&nbsp;by&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>, breaking source compatibility.</li><li class="" style="margin: 0.25em 0px 15px; box-sizing: border-box;">Redefine&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">AnyObject</code>&nbsp;as&nbsp;<code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px; padding: 0.2em 0px; word-break: normal; word-wrap: normal; box-sizing: border-box;">typealias AnyObject = class</code>.</li></ol></div></blockquote>I agree with other comments on recommending 4 here, and covering the others as alternatives<div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><h2 class="" style="font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-size: 24px; box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-source-compatibility" class="anchor" href="https://github.com/hartbit/swift-evolution/blob/e6411d8a9e7924bbd8a48fc292bf08d58a8d1199/proposals/XXXX-subclass-existentials.md#source-compatibility" aria-hidden="true" style="color: rgb(64, 120, 192); background-color: transparent; text-decoration: none; box-sizing: border-box; -webkit-text-decoration-skip: objects; float: left; padding-right: 4px; margin-left: -20px; line-height: 1;"><svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16" style=""><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z" style=""></path></svg></a></h2></div></blockquote></div></div></div></div></div></blockquote></div><span class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">I agree that we need the typealias for compatibility. I think it's still worth discussing whether the `AnyObject` typealias should *only* be there for compatibility; it could be deprecated or obsoleted in Swift 4 or future language versions.</span></div></blockquote><div class=""><br class=""></div><div class="">I think it might be worth keeping to provide a more sensible capitalization alternative than lower case “class” when used as a type name:</div><div class=""><br class=""></div><div class="">var obj: class // this looks weird because of capitalization.</div><div class=""><br class=""></div><div class=""><div class="">var obj: AnyObject // this looks better.</div></div></div></div></blockquote><div class=""><br class=""></div><div class="">I agree that it looks better and would choose AnyObject if source compatibility weren't an issue. &nbsp;One option that wasn't listed was to drop 'class' but use a multi-release deprecation strategy and a fix-it to facilitate a smooth transition. &nbsp;If the community is willing to adopt this approach it would be my first choice.</div></div></blockquote><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">You mean option 3?</div></div></blockquote><div class=""><br class=""></div><div class="">Pretty much, but option 3 does not make it clear that it won’t break source immediately in Swift 4. &nbsp;I think it becomes much more reasonable if Swift 3.1 code still compiles in Swift 4 mode, but with a deprecation warning.</div><div class=""><br class=""></div><div class="">The reason I prefer `AnyObject` to `class` is because I think it’s ugly to have `class` as the name of an existential type. &nbsp;Type names are uppercase in Swift. &nbsp;It is also used to compose with protocols which also use uppercase names in Swift. &nbsp;Because it appears in contexts which use an uppercase convention it makes sense for this to have an uppercase name. &nbsp;`AnyObject` seems like the obvious choice if we’re going to go in that direction.</div><br class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><br class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><blockquote type="cite" class="" style="margin: 15px 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><div class=""><div class=""><div class=""><br class=""></div></div><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">-Joe</div><span class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">_______________________________________________</span><br class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">swift-evolution mailing list</span><br class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">swift-evolution@swift.org</a><br class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></div></blockquote><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><span class="">_______________________________________________</span><br class=""><span class="">swift-evolution mailing list</span><br class=""><span class=""><a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a></span><br class=""><span class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br class=""></div></blockquote></div></blockquote><blockquote type="cite" class="" style="margin: 15px 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="" style="margin-top: 0px; margin-bottom: 0px;"><span class="">_______________________________________________</span><br class=""><span class="">swift-evolution mailing list</span><br class=""><span class=""><a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a></span><br class=""><span class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span></div></blockquote></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></div></span></blockquote></div><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"></div></div></blockquote></div><br class=""></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>