<div dir="ltr"><div><div>protocol P {</div><div>    // …</div><div>    // For example the following will not work:</div><div>    // static func foo&lt;T, R&gt;(_ v: T) -&gt; R</div><div>    // Is there some other way?</div><div>    // …</div><div>}</div><div>struct S2 : P {</div><div>    static func foo&lt;T&gt;(_ v: T) -&gt; (T, T) {</div><div>        return (v, v)</div><div>    }</div><div>}</div><div>struct S3 : P {</div><div>    static func foo&lt;T&gt;(_ v: T) -&gt; (T, T, T) {</div><div>        return (v, v, v)</div><div>    }</div><div>}</div></div><div><br></div><div>(I&#39;m guessing but am not sure that I&#39;ve run into (yet) a(nother) situation which would require higher kinded types?)</div></div>