<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=""><div class="">I think Type fits really well. Because every class, struct, and enum gets a static member called ‘Type’. But you can only use it outside the declaration (String.Type), not inside.</div><div class=""><br class=""></div><div class="">So similar to how types declared inside can be referenced:</div><div class=""><br class=""></div><div class="">struct A {</div><div class="">&nbsp; enum Kind {</div><div class="">&nbsp; &nbsp; case cat</div><div class="">&nbsp; &nbsp; case dog</div><div class="">&nbsp; }</div><div class=""><br class=""></div><div class="">&nbsp; var kind: Kind // Use nested type here; I don’t have to write A.Kind</div><div class="">}</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">We could use Type in a similar way:</div><div class=""><br class=""></div><div class="">struct B {</div><div class="">&nbsp; // This gets created automatically for every type, and is accessible today from B.Type</div><div class="">&nbsp; //metatype Type { … }</div><div class=""><br class=""></div><div class="">&nbsp; var children: [Type] // Use here in the same way as Kind above</div><div class="">}</div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">On 11 May 2016, at 8:32 AM, Matthew Johnson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="content-type" content="text/html; charset=utf-8" class=""><div dir="auto" class=""><div class=""><br class=""><br class="">Sent from my iPad</div><div class=""><br class="">On May 10, 2016, at 5:24 PM, Hooman Mehr &lt;<a href="mailto:hooman@mac.com" class="">hooman@mac.com</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On May 10, 2016, at 2:49 PM, Matthew Johnson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class=""><div class="">That said, I’m not sure I understand the concrete use-cases. &nbsp;When is this concept important? &nbsp;When is “Self” not good enough?</div></div></blockquote><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">The only case where there is new functionality is when this is used in a protocol requirement. &nbsp;I gave an example earlier today. &nbsp;</div></div></blockquote></div><br class=""><div class="">This functionality is the key: Ability of an open (non-final) class to conform to a protocol that lets it return an instance of the conforming type (itself). Self does not work for that and we can’t change its behavior (or can we?) So one solution seems to be Matt’s proposal. This functionality is important for me and an example use case is class clusters. For the client code it is sealed and acts just like a final class, but internally it may return a subclass that is an implementation detail. We should be able to do this.</div></div></blockquote><div class=""><br class=""></div>Agree and this is why I am willing to write the proposal for this. &nbsp;There was a discussion a few months ago about this problem and a few solutions were kicked around. &nbsp;The biggest problem with this approach at the time was lack of a good name, which I believe we now have in Type.<div class=""><br class=""></div><div class="">I'm going to let the discussion continue for a day or two and will write a proposal if no significant counter arguments arise.</div><div class=""><br class=""></div><div class="">-Matthew<br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class=""><br class=""></div><div class="">Hooman</div></div></blockquote></div></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>