<div>IMO the most problematic Self becomes in a generic context, i.e.:</div><div><br></div><div>(pseudo code below)</div><div><br></div><div>protocol Monad {</div><div>associatedtype A</div><div><br></div><div>func flatMap&lt;B&gt;(f:(A)-&gt;Monad&lt;B&gt;) -&gt; ErasedSelf&lt;B&gt;</div><div>}</div><div><br></div><div>I would really like to have this ErasedSelf.</div><div><br><div class="gmail_quote"><div>On Sun, 8 Jan 2017 at 5:21 Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_msg">On Sat, Jan 7, 2017 at 5:33 PM, Braeden Profile <span class="gmail_msg">&lt;<a href="mailto:jhaezhyr12@gmail.com" class="gmail_msg" target="_blank">jhaezhyr12@gmail.com</a>&gt;</span> wrote:<br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="m_1511110032723601971h5 gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg"><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(79,129,135)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(146,146,146)" class="gmail_msg"><div style="font-family:Helvetica;font-size:12px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg">Of course, I would love being able to use an initializer setup, but there are serious bugs in the implementation.</div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-family:Helvetica;font-size:12px" class="gmail_msg"><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:0.94em;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);border:1px solid rgb(204,204,204);white-space:pre-wrap;word-wrap:break-word;padding:5px" class="gmail_msg"><div style="white-space:normal;font-family:Helvetica;font-size:12px" class="gmail_msg"><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,143,1)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">protocol</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> Clonable</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">{</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(other: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(73,134,114)" class="gmail_msg">Self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">}</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,143,1)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">extension</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(95,174,174)" class="gmail_msg">Clonable</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">{</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">func</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> clone() -&gt; </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(73,134,114)" class="gmail_msg">Self</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span>{ </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">return</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> type(of: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">).</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(other: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">) }</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">}</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(95,174,174)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">class</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> Base: </span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">Clonable</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">{</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">var</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> x: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(91,38,153)" class="gmail_msg">Int</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><br class="m_1511110032723601971m_-311399833560624468m_-602078394375739685webkit-block-placeholder gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(x: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(91,38,153)" class="gmail_msg">Int</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span>{ </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">x</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = x }</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><br class="m_1511110032723601971m_-311399833560624468m_-602078394375739685webkit-block-placeholder gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,143,1)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">required</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> </span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(other: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(95,174,174)" class="gmail_msg">Base</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span>{ </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">x</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = other.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">x</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> }</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">}</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">class</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> Derived: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(95,174,174)" class="gmail_msg">Base</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">{</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(91,38,153)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">var</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> y: </span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">String</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><br class="m_1511110032723601971m_-311399833560624468m_-602078394375739685webkit-block-placeholder gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(x: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(91,38,153)" class="gmail_msg">Int</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">, y: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(91,38,153)" class="gmail_msg">String</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span>{</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">y</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">super</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(x: x)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span>}</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><br class="m_1511110032723601971m_-311399833560624468m_-602078394375739685webkit-block-placeholder gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(146,146,146)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">// Should be required by the Clonable protocol, but it isn&#39;t.</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,143,1)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">required</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> </span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(other: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(95,174,174)" class="gmail_msg">Derived</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span>{</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">self</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">y</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> = other.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span></span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">super</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(other: other)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span>}</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><br class="m_1511110032723601971m_-311399833560624468m_-602078394375739685webkit-block-placeholder gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(146,146,146)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">// Required because it was `required` in Base.  Even a `Derived` calls this initializer to clone, which is wrong.  Bugs abound.</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,143,1)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span></span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">required</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> </span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">init</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(other: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(95,174,174)" class="gmail_msg">Base</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(2,37,188)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"><span class="m_1511110032723601971m_-311399833560624468m_-602078394375739685Apple-tab-span gmail_msg" style="white-space:pre-wrap">                </span>{ </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(61,29,129)" class="gmail_msg">fatalError</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">&quot;init(other:) is wrong.&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">) }</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">}</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"></span><br class="gmail_msg"></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> me = </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(95,174,174)" class="gmail_msg">Derived</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">(x: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(218,32,0)" class="gmail_msg">1</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">, y: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(2,37,188)" class="gmail_msg">&quot;food&quot;</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(146,146,146)" class="gmail_msg"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,143,1)" class="gmail_msg">let</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg"> alienClone = </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(79,129,135)" class="gmail_msg">me</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">.</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(49,89,93)" class="gmail_msg">clone</span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">() </span><span style="font-variant-ligatures:no-common-ligatures" class="gmail_msg">// &quot;init(other:) is wrong.&quot;</span></div><div class="gmail_msg"><br class="gmail_msg"></div></div></pre></div></span></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Agree. That seems wrong. Great example.</div></div></div></div></div></blockquote><br class="gmail_msg"></div></div></div><div class="gmail_msg">So, is this odd behavior intentional, a bug, or a design deficiency?  I would think that when a protocol has a method or initializer has `Self` parameters—like in Clonable—every subclass would be required to implement its own specialized version (much like a required initializer).  That would be a special case of the protocol system, though.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">As it sits, even fixing the calling behavior of my example leaves us with the problem of subclasses inheriting inapplicable required initializers from superclasses that actually don’t make any sense.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Does this deserve its own thread?</div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">Dunno, maybe best to have its own thread. It&#39;s not mentioned as part of SE-0068, but IMO a complete design that respects the spirit of that proposal *should* involve allowing you to write:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">```</div><div class="gmail_msg">class Base : Clonable {</div><div class="gmail_msg">  required init(other: Self) { ... }</div><div class="gmail_msg">}</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">class Derived : Base {</div><div class="gmail_msg">  required init(other: Self) { ... }</div><div class="gmail_msg">}</div><div class="gmail_msg">```</div><div class="gmail_msg"><br class="gmail_msg"></div></div><br class="gmail_msg"></div></div><br><br>_______________________________________________<br class="gmail_msg"><br>swift-evolution mailing list<br class="gmail_msg"><br><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><br><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"><br></blockquote></div></div>