<div style="white-space:pre-wrap"><br>ConstructibleFromValue<ValueType == V><br><br>Sounds way better to me than the second option considering we can't do just<br><br>ConstructibleFromValue<V><br><br>Because of lack of order of associated types. So IMO either we introduce order or we use == syntax. Maybe somebody has more ideas of a better syntax?</div><br><div class="gmail_quote"><div dir="ltr">On Tue, 6 Dec 2016 at 11:33 Anton Zhilin via swift-evolution <<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="m_2356099523461971695markdown-here-wrapper gmail_msg"><p style="margin:0px 0px 1.2em!important" class="gmail_msg">What makes me worry is if this syntax is really the best one possible:</p></div></div><div dir="ltr" class="gmail_msg"><div class="m_2356099523461971695markdown-here-wrapper gmail_msg">
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class="gmail_msg"><code class="m_2356099523461971695hljs m_2356099523461971695language-swift gmail_msg" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="m_2356099523461971695hljs-keyword gmail_msg" style="color:rgb(51,51,51);font-weight:bold">typealias</span> <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">ConstructibleFrom</span><<span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">V</span>> = <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">ConstructibleFromValue</span> <span class="m_2356099523461971695hljs-keyword gmail_msg" style="color:rgb(51,51,51);font-weight:bold">where</span> <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">ValueType</span> == <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">V</span>
</code></pre>
</div></div><div dir="ltr" class="gmail_msg"><div class="m_2356099523461971695markdown-here-wrapper gmail_msg"><p style="margin:0px 0px 1.2em!important" class="gmail_msg">I find it strange that such exact line with <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">typealias</code> and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">where</code> is required. I was hoping for an expression that lets us specialize a protocol and use it in-place, like so:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class="gmail_msg"><code class="m_2356099523461971695hljs m_2356099523461971695language-swift gmail_msg" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="m_2356099523461971695hljs-class gmail_msg"><span class="m_2356099523461971695hljs-keyword gmail_msg" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyType</span> : <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ConstructibleFromValue</span><<span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ValueType</span> == <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">V</span>>
<span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">extension</span> <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyType</span> : (<span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ConstructibleFromValue</span> <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">where</span> <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ValueType</span> == <span class="m_2356099523461971695hljs-title gmail_msg" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">V</span>)</span>
</code></pre>
<p style="margin:0px 0px 1.2em!important" class="gmail_msg">Also I thought that this topic does not really belong to generalized existentials:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class="gmail_msg"><code class="m_2356099523461971695hljs m_2356099523461971695language-swift gmail_msg" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="m_2356099523461971695hljs-keyword gmail_msg" style="color:rgb(51,51,51);font-weight:bold">var</span> x: <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">ConstructibleFrom</span><<span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">Float</span>>
</code></pre>
<p style="margin:0px 0px 1.2em!important" class="gmail_msg">I mean, we specify all the types here, so the compiler should just specialize the protocol and use it as a normal existential. The only thing that does not allow us to do that now is syntax.<br class="gmail_msg">By comparison, the following <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">typealias</code> does require generalized existentials, because some <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">associatedtype</code>s, including <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="gmail_msg">Iterator</code>, are not specified:</p></div></div><div dir="ltr" class="gmail_msg"><div class="m_2356099523461971695markdown-here-wrapper gmail_msg">
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class="gmail_msg"><code class="m_2356099523461971695hljs m_2356099523461971695language-swift gmail_msg" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="m_2356099523461971695hljs-keyword gmail_msg" style="color:rgb(51,51,51);font-weight:bold">typealias</span> <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">GenericCollection</span><<span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">E</span>> = <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">Collection</span> <span class="m_2356099523461971695hljs-keyword gmail_msg" style="color:rgb(51,51,51);font-weight:bold">where</span> <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">Iterator</span>.<span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">Index</span> == <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">Int</span>, <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">Element</span> == <span class="m_2356099523461971695hljs-type gmail_msg" style="color:rgb(68,85,136);font-weight:bold">E</span>
</code></pre>
</div></div><div dir="ltr" class="gmail_msg"><div class="m_2356099523461971695markdown-here-wrapper gmail_msg"><p style="margin:0px 0px 1.2em!important" class="gmail_msg">It also shows that future generalized-existentials syntax will likely be exactly the same as the one we choose now for protocol specialization.<br class="gmail_msg">So we still should think twice before proceeding. We can implement this proposal now, but do we want to?</p>
<div title="MDH:V2hhdCBtYWtlcyBtZSB3b3JyeSBpcyBpZiB0aGlzIHN5bnRheCBpcyByZWFsbHkgdGhlIGJlc3Qg
b25lIHBvc3NpYmxlOjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgc3dpZnQ8L2Rpdj48ZGl2PnR5cGVh
bGlhcyBDb25zdHJ1Y3RpYmxlRnJvbSZsdDtWJmd0OyA9IENvbnN0cnVjdGlibGVGcm9tVmFsdWUg
d2hlcmUgVmFsdWVUeXBlID09IFY8L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk
aXY+SSBmaW5kIGl0IHN0cmFuZ2UgdGhhdCBzdWNoIGV4YWN0IGxpbmUgd2l0aCBgdHlwZWFsaWFz
YCBhbmQgYHdoZXJlYCBpcyByZXF1aXJlZC4gSSB3YXMgaG9waW5nIGZvciBhbiBleHByZXNzaW9u
IHRoYXQgbGV0cyB1cyBzcGVjaWFsaXplIGEgcHJvdG9jb2wgYW5kIHVzZSBpdCBpbi1wbGFjZSwg
bGlrZSBzbzo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmBgYHN3aWZ0PC9kaXY+PGRpdj5leHRl
bnNpb24gTXlUeXBlIDogQ29uc3RydWN0aWJsZUZyb21WYWx1ZSZsdDtWYWx1ZVR5cGUgPT0gViZn
dDs8L2Rpdj48ZGl2PmV4dGVuc2lvbiBNeVR5cGUgOiAoQ29uc3RydWN0aWJsZUZyb21WYWx1ZSB3
aGVyZSBWYWx1ZVR5cGUgPT0gVik8L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk
aXY+QWxzbyBJIHRob3VnaHQgdGhhdCB0aGlzIHRvcGljIGRvZXMgbm90IHJlYWxseSBiZWxvbmcg
dG8gZ2VuZXJhbGl6ZWQgZXhpc3RlbnRpYWxzOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBg
c3dpZnQ8L2Rpdj48ZGl2PnZhciB4OiBDb25zdHJ1Y3RpYmxlRnJvbSZsdDtGbG9hdCZndDs8L2Rp
dj48ZGl2PmBgYDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSBtZWFuLCB3ZSBzcGVjaWZ5IGFs
bCB0aGUgdHlwZXMgaGVyZSwgc28gdGhlIGNvbXBpbGVyIHNob3VsZCBqdXN0IHNwZWNpYWxpemUg
dGhlIHByb3RvY29sIGFuZCB1c2UgaXQgYXMgYSBub3JtYWwgZXhpc3RlbnRpYWwuIFRoZSBvbmx5
IHRoaW5nIHRoYXQgZG9lcyBub3QgYWxsb3cgdXMgdG8gZG8gdGhhdCBub3cgaXMgc3ludGF4Ljwv
ZGl2PjxkaXY+QnkgY29tcGFyaXNvbiwgdGhlIGZvbGxvd2luZyBgdHlwZWFsaWFzYCBkb2VzIHJl
cXVpcmUgZ2VuZXJhbGl6ZWQgZXhpc3RlbnRpYWxzLCBiZWNhdXNlIHNvbWUgYGFzc29jaWF0ZWR0
eXBlYHMsIGluY2x1ZGluZyBgSXRlcmF0b3JgLCBhcmUgbm90IHNwZWNpZmllZDo8L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2PmBgYHN3aWZ0PC9kaXY+PGRpdj50eXBlYWxpYXMgR2VuZXJpY0NvbGxl
Y3Rpb24mbHQ7RSZndDsgPSBDb2xsZWN0aW9uIHdoZXJlIEl0ZXJhdG9yLkluZGV4ID09IEludCwg
RWxlbWVudCA9PSBFPC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pkl0IGFs
c28gc2hvd3MgdGhhdCBmdXR1cmUgZ2VuZXJhbGl6ZWQtZXhpc3RlbnRpYWxzIHN5bnRheCB3aWxs
IGxpa2VseSBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBvbmUgd2UgY2hvb3NlIG5vdyBmb3Ig
cHJvdG9jb2wgc3BlY2lhbGl6YXRpb24uPC9kaXY+PGRpdj5TbyB3ZSBzdGlsbCBzaG91bGQgdGhp
bmsgdHdpY2UgYmVmb3JlIHByb2NlZWRpbmcuIFdlIGNhbiBpbXBsZW1lbnQgdGhpcyBwcm9wb3Nh
bCBub3csIGJ1dCBkbyB3ZSB3YW50IHRvPzxicj48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0" class="gmail_msg"></div></div></div>
_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote></div>