<div dir="ltr">That makes sense, thanks for pointing out a possibility I missed!<div><br></div><div>Austin</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 14, 2016 at 11:34 AM, Vladimir.S <span dir="ltr">&lt;<a href="mailto:svabox@gmail.com" target="_blank">svabox@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 14.05.2016 21:20, Austin Zheng wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Yes, this is theoretically possible, but why is it useful? (I am genuinely<br>
curious.)<br>
</blockquote>
<br></span>
I just showing that we *can* invent the situation when checking for struct&lt;Struct,Protocol&gt; have a sense. Not more, not less.<br>
I&#39;m not going to discuss if that can have any (or never can have at all) useful intention.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
If the intention is to allow B to be a user-defined extension point for T,<br>
this goes back to the core team&#39;s arguments (in the thread about optional<br>
protocol requirements) about why having checking for conformance to some<br>
requirement at the use site is a suboptimal idea.<br>
<br>
If the intention is to make the type system as expressive as possible, the<br>
core team has already ruled out a number of features (user-defined variance<br>
on generics, generic protocols) because they don&#39;t believe in their general<br>
applicability.<br>
<br>
Austin<br>
<br>
On Sat, May 14, 2016 at 11:13 AM, Vladimir.S &lt;<a href="mailto:svabox@gmail.com" target="_blank">svabox@gmail.com</a><br></span><span class="">
&lt;mailto:<a href="mailto:svabox@gmail.com" target="_blank">svabox@gmail.com</a>&gt;&gt; wrote:<br>
<br>
    FWIW, yes, protocols available for struct are known at compile-time,<br>
    but could be unknown at the *moment of writing* the code.<br>
<br>
    What I mean:<br>
<br>
    Step 1. I write source code:<br>
<br>
    protocol A {}<br>
    protocol B {}<br>
    struct S:A {}<br>
<br>
    func f(a: A) {<br>
      if a is struct&lt;S,B&gt; {...} // I expect that S could be conformed to B<br>
    }<br>
<br>
    Step 2. I give my code to someone, who can do somewhere in his project:<br>
<br>
    extension S:B{..}<br>
<br>
<br>
<br>
<br>
    On 14.05.2016 7:06, Austin Zheng via swift-evolution wrote:<br>
<br>
        1. struct&lt;SomeConcreteStruct, Protocol1, Protocol2&gt;. In this case the<br>
        struct&lt;...&gt; representation is unnecessary; the protocols that are<br>
        available<br>
        to the user are known at compile-time, and structs can&#39;t have<br>
        subtypes that<br>
        conform to additional protocols like classes can. There is an example<br>
        marked &quot;func boo(value: struct&lt;SomeStruct&gt;) /* equivalent to */ func<br>
        boo(value: SomeStruct)&quot;; my question is why having more than two<br>
        ways to<br>
        express the same idea makes the language better, easier to use, etc.<br>
<br>
<br>
</span></blockquote>
</blockquote></div><br></div>