<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 May 27, 2016, at 2:26 PM, Austin Zheng &lt;<a href="mailto:austinzheng@gmail.com" class="">austinzheng@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Thanks for all your thoughtful replies.</div><div class=""><br class=""></div>I'm not really invested in arguing this much further, as it's mainly a stylistic thing that I could live with and also probably a hopeless battle (given how everyone else disagrees). </div></div></blockquote><div><br class=""></div><div>I’ve been in the same place with some of the other stylistic battles. &nbsp;:-)</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class="">But I would like to address a few final points.</div></div></blockquote><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">(inline)<br class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, May 27, 2016 at 12:06 PM, Matthew Johnson <span dir="ltr" class="">&lt;<a href="mailto:matthew@anandabits.com" target="_blank" class="">matthew@anandabits.com</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><br class=""></span><div class=""><br class=""></div><div class="">Turning it around, we don’t have to put parentheses around function types and nobody complains about it being problematic even for higher-order functions with several steps before the final result.</div></div></div></blockquote><div class=""><br class=""></div><div class="">Function types have a very regular syntax, especially now that 0066 was accepted (which, I admit, was very controversal itself):</div><div class=""><br class=""></div><div class="">( &lt;one or more types&gt; ) -&gt; (tuple)</div><div class="">or</div><div class="">( &lt;one or more types&gt; ) -&gt; SingleTypeWithNoSpaces</div><div class="">or</div><div class="">( &lt;one or more types&gt; ) -&gt; GenericType&lt;All, Spaces, Are, Inside, The, Brackets&gt;</div><div class=""><br class=""></div><div class="">A function type is very easy to visually parse: combine the argument parens, arrow thing, and the single type that it returns. That being said, complex function types are probably the most difficult types to read in a function declaration today, even with this regular structure.</div><div class=""><br class=""></div><div class="">The proposed syntax, which allows arbitrary whitespace outside the context of a delimiter, would require the user to scan the string comprising the existential type expression for a very common sigil in order to locate the endpoint: '=' for variable declarations (which admittedly isn't that bad) or ',' for functions (which is a lot worse). Not to mention the point Joe Groff brought up about a generic function with a generic where clause returning an existential and having everything devolve into a undifferentiated soup of identifiers.</div><div class="">&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><br class=""></div><div class="">Does anyone know if users of Ceylon or other languages with the unparenthesized syntax find it problematic?&nbsp; How would they feel about being required to use parentheses?</div><span class=""><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class="">We're trying to establish a syntax that will hopefully be used for things significantly more complicated than tuple definitions, which are just a list of types. I think readability is a major concern. Typealiases should be supported, but they shouldn't be required to make the feature useable.</div></div></div></blockquote><div class=""><br class=""></div></span><div class="">I agree, but I don’t think they would be required to make the feature useable just because parentheses are not required.&nbsp; If a developer or team thinks they are required for clarity / readability, etc they are free to use them.&nbsp; This is a style issue that should be addressed by a linter, not the formal syntax of the language.</div></div></div></blockquote><div class=""><br class=""></div><div class="">It is a style issue, but so is (Int) -&gt; T versus Int -&gt; T and a lot of other language details like trailing commas in argument lists, of which the core team seems to feel pretty strongly about.</div></div></div></div></div></div></blockquote><div><br class=""></div><div>Fair enough! :-)</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><div class="">&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class="">Finally, wouldn't we need some delimiter for nested existential definitions anyways? Now you have the confusing situation where the outside definition has no delimiters, but the inside ones do:</div><div class=""><br class=""></div><div class="">// Why does the inner existential look fundamentally different than the outer one?</div><div class="">// Not to mention, visually parsing the boundaries of this type when you look at it in a function signature</div><div class="">let x : Protocol1, Protocol2, (Protocol 3 where .Foo == Int) where Protocol2.Bar : Baz</div></div></div></blockquote><div class=""><br class=""></div></span><div class="">Nested existentials are supported not because it would ever be a good idea to actually write them.&nbsp; They are supported to allow composition of existentials:</div><div class=""><br class=""></div></div></div></blockquote><div class=""><br class=""></div><div class="">Perhaps then we should only allow existentials to be nested if a typealias is used. Swift is, after all, an opinionated language. If a feature is in the language, it should either be usable directly in an ergonomic way, or it shouldn't be there at all. Having a self-admittedly "bad" way to nest literal existential expressions just for consistency when typealiases are the preferred use case is very unlike Swift.</div></div></div></div></div></div></blockquote><div><br class=""></div><div>I think self-admittedly “bad” is a bit of a stretch. &nbsp;I do *think* the conventional style would be to match the rest of Swift. &nbsp;But I’m not *certain* of that. &nbsp;I could see the style Thorsten posted being conventional and useful in some cases:</div><div><br class=""></div><div>let x : Protocol1 &amp; (Protocol2 where .Bar : Baz) &amp; (Protocol 3 where .Foo == Int)</div><div><br class=""></div><div>I think direct `&amp;` syntax will be most useful when combining two (or maybe three) protocols with no associated types: &nbsp;`Protocol1 &amp; Protocol2` (whether or not we require parens). &nbsp;</div><div><br class=""></div><div>Generally I hope we will use type aliases for existentials that are this complex just as we usually bind names to parts of expressions rather than writing large one-liners.</div><div><br class=""></div><div>One issue I’m not sure we have addressed is the case of an existential for a single protocol with an associated type constraint `Protocol where .Foo = Int`. &nbsp;Before we settle on a syntax we should be sure that this doesn’t introduce any ambiguity.</div><div><br class=""></div><div>-Matthew</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><div class="">&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""></div><div class="">typealias P3Int = Protocol 3 where .Foo == Int</div><div class=""><div style="word-wrap:break-word" class=""><div class="">let x : Protocol1, Protocol2, P3Int where Protocol2.Bar : Baz</div></div></div><div class=""><br class=""></div><div class="">If you are writing the entire type in a single location I expect the conventional style to be like this:</div><div class=""><br class=""></div><div class=""><div style="word-wrap:break-word" class=""><div class="">let x : Protocol1, Protocol2, Protocol 3 where Protocol2.Bar : Baz, Protocol3.Foo == Int</div></div></div><div class=""><br class=""></div><div class="">With all associated types constraints in a single `where` clause as we other places they are written in Swift.</div><div class=""><br class=""></div><div class="">Maybe I am wrong about that and a different conventional style would emerge (for example, where clauses clustered with the related protocol). &nbsp;</div><div class=""><br class=""></div><div class="">But *requiring* parentheses is really orthogonal to the style issue of where and when it is considered *advisable* to use them.</div><span class="HOEnZb"><font color="#888888" class=""><div class=""><br class=""></div><div class="">-Matthew</div></font></span><div class=""><div class="h5"><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class="">I hope that explains my reasoning.</div><div class=""><br class=""></div><div class="">Best,</div><div class="">Austin</div><div class=""><br class=""></div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On May 27, 2016, at 9:28 AM, Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com" target="_blank" class="">matthew@anandabits.com</a>&gt; wrote:</div><br class=""><div class=""><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""><br class="">Sent from my iPad</div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class="">On May 27, 2016, at 11:18 AM, Austin Zheng &lt;<a href="mailto:austinzheng@gmail.com" target="_blank" class="">austinzheng@gmail.com</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><div class="">Here's a strawman idea.<div class=""><br class=""></div><div class="">What if we go with '&amp;' and 'where', but we enclose the whole thing in parentheses?</div><div class=""><br class=""></div><div class="">(class &amp; Protocol1 &amp; Protocol2 where .Foo == Int, .Bar : Baz)</div><div class=""><br class=""></div><div class="">There are a couple of reasons I propose this syntax:</div><div class=""><br class=""></div><div class="">- It makes it very clear where the definition of the type begins and ends. I understand people really despise angle brackets, but I really want some way to visually delineate the boundaries of the type. Plus, I imagine it makes syntax a little easier to parse and preemptively forbids some ambiguities.</div><div class=""><br class=""></div><div class="">- It's a structural, not nominal, type, like a tuple, so it uses parens as well. This reserves "&lt;" and "&gt;" for generic types.</div><div class=""><br class=""></div><div class="">- The '&amp;' is easily understood - "Protocol1" *and* "Protocol2". It's also a signal that order doesn't matter - just like how order matters with things that use commas, like argument lists, tuples, and array members, order doesn't generally matter with bitwise or logical 'and' operators.</div><div class=""><br class=""></div><div class="">- If we ever decide to have union types, we have a very elegant third form of nominal type syntax that naturally falls out: (MyClass1 | MyClass2 | MyClass3).</div><div class=""><br class=""></div><div class="">Thoughts?</div></div></blockquote><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""></div><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">Generally in favor.&nbsp; But I would not require the parentheses.&nbsp; I believe they would be allowed optionally automatically, just as (Int) is the same as Int (because single element tuples don't exist and the underlying type is used directly instead).&nbsp; It seems better to leave parentheses up to a matter of style.</span><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""><blockquote type="cite" class=""><div class=""><div class=""><br class=""></div><div class="">Austin</div><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On May 27, 2016, at 9:07 AM, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class=""><div class=""><div style="word-wrap:break-word" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">Am 27.05.2016 um 16:54 schrieb Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com" target="_blank" class="">matthew@anandabits.com</a>&gt;:</div><br class=""><div class=""><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><div class=""><br class="">On May 27, 2016, at 8:18 AM, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class=""><div class=""><div style="word-wrap:break-word" class="">Personally I think `&amp;` is more lightweight (and it is established in other languages like Ceylon and Typescript) and `where` is more expressive (and established in Swift for introducing constraints), so I would stay with these.</div></div></blockquote><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class="">I agree.&nbsp; If we can make `&amp;` with `where` work syntactically it would be nice to go in this lighter weight direction.&nbsp; If we decide to do that the question then becomes what to do with `protocol`.&nbsp; Would it be feasible to replace it with `&amp;` in Swift 3 if we decide on that direction?</div></div></blockquote><div class=""><br class=""></div>Yep. `protocol` should be replaced with `&amp;` in that case.</div><div class=""><br class=""></div><div class="">-Thorsten</div><div class=""><br class=""></div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class="">-Thorsten<br class=""><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">Am 27.05.2016 um 14:34 schrieb Vladimir.S &lt;<a href="mailto:svabox@gmail.com" target="_blank" class="">svabox@gmail.com</a>&gt;:</div><br class=""><div class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">Btw, in case we have `where` keyword in syntax related to types/protocols (when defining constrains. and not some symbol like '&gt;&gt;'.. don't know, for example), why we can't have 'and' keyword also when discuss the syntax of type/protocol conjunction?</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">I.e.</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">let x: P and Q</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">let x: P and Q where P.T == Q.T</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">let x: P and Q and R</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">or, for consistency, as I understand it, we should have</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">let x: P &amp; Q &gt;&gt; P.T == Q.T</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">On 27.05.2016 11:55, Thorsten Seitz via swift-evolution wrote:</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class="">We could just write<br class=""><br class="">let x: P &amp; Q<br class="">instead of<br class="">let x: Any&lt;P, Q&gt;<br class=""><br class="">let x: Collection where .Element: P<br class="">instead of<br class="">let x: Any&lt;Collection where .Element: P&gt;<br class=""><br class="">let x: P &amp; Q where P.T == Q.T<br class="">instead of<br class="">let x: Any&lt;P, Q where P.T == Q.T&gt;<br class=""><br class="">let x: P &amp; Q &amp; R<br class="">instead of<br class="">let x: Any&lt;P, Q, R&gt;<br class=""><br class="">let x: Collection<br class="">instead of<br class="">let x: Any&lt;Collection&gt;<br class=""><br class=""><br class="">This would avoid the confusion of Any&lt;T1, T2&gt; being something completely<br class="">different than a generic type (i.e. order of T1, T2 does not matter whereas<br class="">for generic types it is essential).<br class=""><br class=""><br class="">-Thorsten<br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class="">Am 26.05.2016 um 20:11 schrieb Adrian Zubarev via swift-evolution<br class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;&gt;:<br class=""><br class="">Something like |type&lt;…&gt;| was considered at the very start of the whole<br class="">discussion (in this thread<br class="">&lt;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160502/016523.html" target="_blank" class="">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160502/016523.html</a>&gt;),<br class="">but it does not solve the meaning of an existential type and also might<br class="">lead to even more confusion.<br class=""><br class="">From my perspective I wouldn’t use parentheses here because it looks more<br class="">like an init without any label |Type.init(…)| or |Type(…)|. I could live<br class="">with |Any[…]| but this doesn’t look shiny and Swifty to me. Thats only my<br class="">personal view. ;)<br class=""><br class=""><br class=""><br class=""><br class="">--<br class="">Adrian Zubarev<br class="">Sent with Airmail<br class=""><br class="">Am 26. Mai 2016 bei 19:48:04, Vladimir.S via swift-evolution<br class="">(<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;) schrieb:<br class=""><br class=""><blockquote type="cite" class="">Don't think {} is better here, as they also have "established meaning in<br class="">Swift today".<br class=""><br class="">How about just Type(P1 &amp; P2 | P3) - as IMO we can think of such<br class="">construction as "creation" of new type and `P1 &amp; P2 | P3` could be treated<br class="">as parameters to initializer.<br class=""><br class="">func f(t: Type(P1 &amp; P2 | P3)) {..}<br class=""><br class=""><br class="">On 26.05.2016 20:32, L. Mihalkovic via swift-evolution wrote:<br class="">&gt; How about something like Type{P1 &amp; P2 | P3} the point being that "&lt;...&gt;" has an established meaning in Swift today which is not what is expressed in the "&lt;P1,P2,P3&gt;" contained inside Any&lt;P1, P2,P3&gt;.<br class="">&gt;<br class="">&gt;&gt; On May 26, 2016, at 7:11 PM, Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;&gt; wrote:<br class="">&gt;&gt;<br class="">&gt;&gt;<br class="">&gt;&gt;&gt; on Thu May 26 2016, Adrian Zubarev &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;&gt; wrote:<br class="">&gt;&gt;&gt;<br class="">&gt;&gt;&gt; There is great feedback going on here. I'd like to consider a few things here:<br class="">&gt;&gt;&gt;<br class="">&gt;&gt;&gt; * What if we name the whole thing `Existential&lt;&gt;` to sort out all<br class="">&gt;&gt;&gt; confusion?<br class="">&gt;&gt;<br class="">&gt;&gt; Some of us believe that “existential” is way too theoretical a word to<br class="">&gt;&gt; force into the official lexicon of Swift. I think “Any&lt;...&gt;” is much<br class="">&gt;&gt; more conceptually accessible.<br class="">&gt;&gt;<br class="">&gt;&gt;&gt;<br class="">&gt;&gt;&gt; This would allow `typealias Any = Existential&lt;&gt;`. * Should<br class="">&gt;&gt;&gt; `protocol A: Any&lt;class&gt;` replace `protocol A: class`? Or at least<br class="">&gt;&gt;&gt; deprecate it. * Do we need `typealias AnyClass = Any&lt;class&gt;` or do we<br class="">&gt;&gt;&gt; want to use any class requirement existential directly? If second, we<br class="">&gt;&gt;&gt; will need to allow direct existential usage on protocols (right now we<br class="">&gt;&gt;&gt; only can use typealiases as a worksround).<br class="">&gt;&gt;<br class="">&gt;&gt; --<br class="">&gt;&gt; Dave<br class="">&gt;&gt;<br class="">&gt;&gt; _______________________________________________<br class="">&gt;&gt; swift-evolution mailing list<br class="">&gt;&gt;<span class="">&nbsp;</span><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;<br class="">&gt;&gt;<span class="">&nbsp;</span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">&gt; _______________________________________________<br class="">&gt; swift-evolution mailing list<br class="">&gt;<span class="">&nbsp;</span><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;<br class="">&gt;<span class="">&nbsp;</span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">&gt;<br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;<br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></blockquote><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><span class="">&nbsp;</span>&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">mailto:swift-evolution@swift.org</a>&gt;<br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></blockquote><br class=""><br class=""><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></blockquote></div></blockquote></div><br class=""></div></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div></blockquote></div><br class=""></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div></div></div></blockquote></div></div></blockquote></div><br class=""></div></div></blockquote></div></div></div><br class=""></div></blockquote></div><br class=""></div></div></div>
</div></blockquote></div><br class=""></body></html>