<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Dec 4, 2015, at 12:25 AM, Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com" class="">gribozavr@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">On Thu, Dec 3, 2015 at 3:09 PM, Douglas Gregor &lt;<a href="mailto:dgregor@apple.com" class="">dgregor@apple.com</a>&gt; wrote:<br class="">&gt;<br class="">&gt;&gt; On Dec 3, 2015, at 2:59 PM, Felix Gabel &lt;<a href="mailto:felix.gabel@me.com" class="">felix.gabel@me.com</a>&gt; wrote:<br class="">&gt;&gt;<br class="">&gt;&gt; Hey everyone,<br class="">&gt;&gt;<br class="">&gt;&gt; I hereby propose adding a ’sealed’ modifier for protocols to enable library developers to declare protocols that can be only conformed to in the scope of the library itself. This is similar to a ’sealed trait’ in Scala with the difference that it does not limit the protocol to be only applicable in the file it is declared in.<br class="">&gt;&gt;<br class="">&gt;&gt; Example:<br class="">&gt;&gt;<br class="">&gt;&gt; public sealed protocol FooType {<br class="">&gt;&gt; &nbsp; &nbsp;// this protocol can be conformed to only in scope of the library itself<br class="">&gt;&gt; &nbsp; &nbsp;// it can NOT be conformed to by any object declared outside the library<br class="">&gt;&gt; }<br class="">&gt;&gt;<br class="">&gt;&gt; What do you think?<br class="">&gt;<br class="">&gt;<br class="">&gt; Can you elaborate on why a Swift developer would want to distinguish between “public sealed” and “internal”?<br class=""><br class="">There are cases when the library isn't designed to support new conformances for the protocol, but the protocol is public because other public APIs are expressed in terms of it.<br class=""><br class="">We have a case for it in the standard library, 'protocol AnyCollectionType'.&nbsp; Foundation also has a use case -- property list types.<div class=""><br class=""></div><div class="">Dmitri</div></div></div></blockquote><br class=""></div><div>- protocols starting with an underscore (_ArrayBufferType, _IntegerType, etc) would benefit from the ’sealed’ modifier, because the contract right now only implicitly says: ‘public but please don’t use’.</div><div>- another use case is grouping a set of types regardless their origin and limit the ability to extend the provided number of types by external forces</div><div><br class=""></div><div><br class=""></div></body></html>