<div dir="ltr">Thanks for clarifying, my responses are inline.<br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 29, 2016 at 10:51 AM, Erica Sadun <span dir="ltr">&lt;<a href="mailto:erica@ericasadun.com" target="_blank">erica@ericasadun.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span class=""><blockquote type="cite"><div>On Apr 28, 2016, at 6:44 PM, Andrew Bennett &lt;<a href="mailto:cacoyi@gmail.com" target="_blank">cacoyi@gmail.com</a>&gt; wrote:</div><br><div><div dir="ltr">Hey, what annotations would I have in this case:<br><br>Module 1:<div style="margin-bottom:16px;background-color:transparent;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:14px;overflow:visible!important"><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal"><span style="color:rgb(167,29,93)">Type</span> AType { <span style="color:rgb(167,29,93)">func</span> <span style="color:rgb(121,93,163)">foo</span>() { <span style="color:rgb(167,29,93)">...</span> } }</pre></div>Module 2:<div style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:14px;margin-bottom:0px!important;overflow:visible!important"><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal"><span style="color:rgb(167,29,93)">import</span> <span style="color:rgb(0,134,179)">Module1</span>
<span style="color:rgb(167,29,93)">protocol</span> A { <span style="color:rgb(167,29,93)">func</span> <span style="color:rgb(121,93,163)">foo</span>() {<span style="color:rgb(167,29,93)">...</span><span style="color:rgb(167,29,93)">default</span><span style="color:rgb(167,29,93)">...</span>} }
<span style="color:rgb(167,29,93)">extension</span> AType: A {}</pre></div><div class="gmail_extra"><div class="gmail_quote"><br></div></div></div></div></blockquote><div><br></div></span><div>No annotations. AType&#39;s implementation of foo is unrelated to its conformance, which is satisfied by its existing foo method.</div></div></div></blockquote><div><br></div><div>Thanks, that resolves my misunderstanding. I thought there would need to be an override or similar.</div><div> </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"><div><span class=""><div><br></div><br><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Also, for your <b>alternatives</b> section:</div><div class="gmail_quote"><br></div><div class="gmail_quote"><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal;color:rgb(51,51,51)"><span style="color:rgb(167,29,93)">protocol</span> A { <span style="color:rgb(167,29,93)">func</span> <span style="color:rgb(121,93,163)">foo</span>() {<span style="color:rgb(167,29,93)">...</span><span style="color:rgb(167,29,93)">default</span><span style="color:rgb(167,29,93)">...</span>} }
<span style="color:rgb(167,29,93)">Type</span> AType: A {
    <span style="color:rgb(167,29,93)">func</span> A<span style="color:rgb(167,29,93)">.</span>foo() {<span style="color:rgb(167,29,93)">...</span>replacement<span style="color:rgb(167,29,93)">...</span>}
}</pre></div><div class="gmail_quote"><br></div><div class="gmail_quote">I actually prefer this alternative, I think it fixes many issues.</div></div></div></blockquote><div><br></div></span><div>Protocol default implementations do not yet exist.  </div><div><br></div><div>In this second, you&#39;re suggesting instead of doing &quot;override required&quot;, you use a naming approach that ties the implementation the specific protocol. I&#39;m not really won over by this approach:</div><div><br></div><div>* It does clarify why the method is included</div><div>* It does not clarify that the method overrides an existing implementation.</div></div></div></blockquote><div>I agree with this, your `override` keyword would work well here.</div><div><br></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"><div><div>* It could be more easily confused when members are required by multiple protocols.</div></div></div></blockquote><div>I see this as a feature. I think this member should *only* implement it for a single protocol.</div><div><br></div><div>If you have the same member in multiple protocols, then they potentially (probably) do different things. They may want different implementations. If the member is meant to represent the same thing, then it should be extracted into a common protocol.</div><div><br></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"><div><span class="HOEnZb"><font color="#888888"><div><br></div><div>-- E</div><div><br></div></font></span></div></div></blockquote></div><br></div></div>