<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I agree with your point on classes, so maybe just value types would be allowed to do it (I have only wanted it for structs myself). &nbsp;I think I answered your comment about distinguishing between existential and struct X if you re-read my original message.<div class=""><div class=""><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Jon</div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Jan 23, 2017, at 5:10 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" class="">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">This would get very confusing, as it would be impossible for a class to distinguish conforming to protocol X vs. inheriting from base class X, or else we would have to change the spelling for that as well. Moreover, you would have no way of distinguishing the existential X from the struct X. I see nothing wrong with the clarity afforded by naming the distinct things `FooProtocol` and `Foo`, and I disagree that there's anything "simplifying" about naming two different things with one name.<div class=""><br class=""></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Mon, Jan 23, 2017 at 6:13 PM, Jonathan Hull via swift-evolution <span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Have we considered allowing a struct/class/enum to have the same name as a protocol as long as it conforms to the protocol?&nbsp; Type declarations would have to always mean the protocol (which includes the concrete type as well).&nbsp; Static functions would always apply to the concrete type.<br class="">
<br class="">
Seems like a good way to support having a default implementation of a protocol.&nbsp; I am always running into the awkward naming issues around this...<br class="">
<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; protocol X {<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //yada yada<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; }<br class="">
<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; struct X { //Implicitly adheres to protocol X (because it must)<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; init(){…}<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; }<br class="">
<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; let myVar:X //This refers to the protocol<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; let otherVar = X() //This makes the struct<br class="">
<br class="">
If we do need to be able to spell the concrete type for other uses, we could probably do something like: ‘concrete(X)’ which isn’t pretty, but is there for the rare times it is needed for utility.&nbsp; I can’t think of any reason except making an array of the concrete type.<br class="">
<br class="">
I am guessing there is a subtle technical reason this won’t work, but I wanted to mention it now just in case it is possible.&nbsp; Seems like it could have a large (simplifying) effect on the namespace of the standard library.<br class="">
<br class="">
Thanks,<br class="">
Jon<br class="">
______________________________<wbr class="">_________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/<wbr class="">mailman/listinfo/swift-<wbr class="">evolution</a><br class="">
</blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></div></div></div></body></html>