<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="">Any proposal that seeks to add private conformances needs to answer to the dynamic side of Swift, most importantly: What does this return:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">let</span><span style="font-variant-ligatures: no-common-ligatures" class=""> f = </span><span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">Foo</span><span style="font-variant-ligatures: no-common-ligatures" class="">()</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">f</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">is</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span><span style="font-variant-ligatures: no-common-ligatures" class="">Bar</span></div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;" class="">If the answer is “it depends”, it needs to be explicitly stated where and how.</div></span></div><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 30, 2017, at 1:07 PM, Ross O'Brien 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=""><div dir="ltr" class="">This idea was had during the SE-0159 Review regarding removing&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">file</span><span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">private</span>&nbsp; and I'm creating a new discussion thread for its consideration. It's neither in favour of nor against keeping&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">file</span><span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">private</span>, but is intended to address an idiom which has led to some resentment against&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">file</span><span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">private</span>.<div class=""><div class=""><br class=""></div><div class="">Copy-pasting from my original post on this:<br class=""><div class=""><br class=""></div><div class=""><div class="">When we declare a type, we declare properties and functions which that type has.</div><div class="">When we extend a type, we add functions to the type. (I'm including computed properties in this.)</div><div class="">It has become an idiom of Swift to declare an extension to a type for each protocol we want it to conform to, for reasons of code organisation and readability. This can be true even if conformance to the protocol was a primary intent of creating the type in the first place.</div><div class=""><br style="font-size:12.800000190734863px" class=""><div style="font-size:12.800000190734863px" class="">The intent of the scoped access level (one use of the current&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">private</span>&nbsp;keyword) is to allow programmers to create properties and functions which are limited to the scope of their declaration. A protocol conformance can be written, with the aid of helper functions, in the confidence that the helper functions are not visible outside the extension, minimising their impact on other components of the module.</div><div style="font-size:12.800000190734863px" class="">However, some protocol conformances require the type to have a specific property, which the extension cannot facilitate. Some protocol conformances don't require a property, but it would be really useful to have one, and again an extension can't facilitate.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">Example: we want to be able to write this, but we can't:</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">private</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures" class="">protocol</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;Bar</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp; </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;integer :&nbsp;</span><span style="color:rgb(112,61,170);font-variant-ligatures:no-common-ligatures" class="">Int</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;{&nbsp;</span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">get</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp; </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">func</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;increment()</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; min-height: 13px;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">struct</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;Foo</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; min-height: 13px;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">extension</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="">Foo</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;:&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="">Bar</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp; </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;integer :&nbsp;</span><span style="color:rgb(112,61,170);font-variant-ligatures:no-common-ligatures" class="">Int</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; min-height: 13px;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp; </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">private</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;counter :&nbsp;</span><span style="color:rgb(112,61,170);font-variant-ligatures:no-common-ligatures" class="">Int</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp; </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">func</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;increment()</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp; </span>{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp;   </span>counter +=&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)" class="">1</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp; </span>}</span></div><p style="margin:0px;font-size:11px;line-height:normal;font-family:menlo;color:rgb(186,45,162)" class=""></p><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div></div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">This leads to a workaround: that properties are added to the original type, and declared as fileprivate. They're not intended to be visible to any scope other than the conforming extension - not even, really, to the type's original scope.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">Continuing the example: we've compromised and written this:</div><div style="font-size:12.800000190734863px" class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">struct</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;Foo</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><font class=""><span style="white-space:pre-wrap" class="">&nbsp; </span></font><font color="#ba2da2" class="">fileprivate</font></span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;integer :&nbsp;</span><span style="color:rgb(112,61,170);font-variant-ligatures:no-common-ligatures" class="">Int</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><font class=""><span style="white-space:pre-wrap" class="">&nbsp; </span></font><font color="#ba2da2" class="">fileprivate</font></span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;counter :&nbsp;</span><span style="color:rgb(112,61,170);font-variant-ligatures:no-common-ligatures" class="">Int</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; min-height: 13px;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">extension</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="">Foo</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;:&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)" class="">Bar</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp; </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">func</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;increment()</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp; </span>{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp;   </span>counter +=&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)" class="">1</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp; </span>}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="" class="">}</span><br class=""></div></div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">This is not a fault of&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">fileprivate</span>&nbsp;(though it's a clunky name), or&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">private</span>. Renaming these levels does not solve the problem. Removing private, such that everything becomes fileprivate, does not solve the problem. The problem is in the extension system.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">Proposal:</div><div style="font-size:12.800000190734863px" class="">Suppose we approached extensions differently.<br class=""></div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">Suppose we created a 'conformance region' inside a type declaration - a scope nested within the type declaration scope - and that this conformance region had its own access level. It's inside the type declaration, not separate from it like an extension, so we can declare properties inside it. But literally the only properties and functions declared inside the region but visible anywhere outside of it, would be properties and functions declared in the named protocol being conformed to.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">So, visually it might look like this:</div><div style="font-size:12.800000190734863px" class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(186, 45, 162);" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">struct</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;Foo</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; color: rgb(0, 132, 0);" class=""><span style="font-variant-ligatures: no-common-ligatures;" class=""><span style="white-space:pre-wrap" class="">&nbsp;&nbsp;</span></span><span style="color:rgb(186,45,162)" class="">conformance</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;Bar&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures" class="">// or conformance Foo : Bar, but since the region is inside Foo that's redundant</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp; </span>{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp;   </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;integer : Int&nbsp;</span><span style="color:rgb(0,132,0);font-variant-ligatures:no-common-ligatures" class="">// visible because Foo : Bar, at Bar's access level</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; min-height: 13px;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp;   </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">var</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;counter : Int =&nbsp;</span><span style="color:rgb(39,42,216);font-variant-ligatures:no-common-ligatures" class="">0</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;</span><span style="color:rgb(0,132,0);font-variant-ligatures:no-common-ligatures" class="">// only visible inside the conformance scope, because not declared in Bar</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo; min-height: 13px;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures;white-space:pre-wrap" class=""><font class="">&nbsp;   </font></span><span style="color:rgb(186,45,162);font-variant-ligatures:no-common-ligatures" class="">func</span><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;increment()&nbsp;</span><span style="color:rgb(0,132,0);font-variant-ligatures:no-common-ligatures" class="">// visible because Foo : Bar, at Bar's access level</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp;   </span>{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp;     </span>counter +=&nbsp;</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)" class="">1</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp;   </span>}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span style="white-space:pre-wrap" class="">&nbsp; </span>}</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: menlo;" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div></div><div style="font-size:12.800000190734863px" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><br class=""></span></div><div style="font-size:12.800000190734863px" class="">I've introduced a new keyword for this example,&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">conformance</span>, though it may be clear enough to keep using&nbsp;<span style="color:rgb(186,45,162);font-family:menlo;font-size:11px" class="">extension</span>. As the extension is inside the type there's no need to redeclare the type being extended. From this example, Foo conforms to Bar, in the same file; it's just been written inside Foo's type declaration, and indented one level, instead of after it.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">Aspects worth considering (some already pointed out by others):<br class=""></div><div style="font-size:12.800000190734863px" class="">The original idea for this is that the conformance region exists only to allow the type to conform to a protocol (though possibly more than one), and that only properties and functions declared in those protocols would be accessible outside of the region, at whatever access level the protocol(s) originally declared.</div><div style="font-size:12.800000190734863px" class="">Existing access terms (internal, fileprivate, etc.) could be used to increase the visibility (to a maximum of the visibility of the declared type, e.g. a public property in a conformance region of an internal type conforming to a fileprivate protocol would be an internally visible property). This would introduce no new keywords.</div><div style="font-size:12.800000190734863px" class="">However, as this defines a new default level within a region of the language, an explicit keyword might be preferred and a default level of internal might be more intuitive.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">This idea presently assumes that conformance regions do not nest. An inner nested type would be able to declare conformance regions in its declaration, and cannot be extended inside another conformance region of the outer type. However, there might be different thoughts on this?</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">We might consider conformance regions in generic types where the associated type meets certain conditions.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">This is an additive pitch. It doesn't affect extensions which 'retroactively' conform types to protocols; it just more visibly identifies active conformances from retroactive conformances.</div><div style="font-size:12.800000190734863px" class="">The pitch is intended to better express the intent of an existing idiom, which may reduce the frustration users have with fileprivate. It's not a replacement to fileprivate. It may be worth postponing SE-0159's resolution until the effect of this on Swift is seen.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">I've likely missed things from the comments of others since I posted this earlier this week. But I welcome your thoughts.</div><div style="font-size:12.800000190734863px" class=""><br class=""></div><div style="font-size:12.800000190734863px" class="">Ross</div><div class="gmail-yj6qo gmail-ajU" style="margin:2px 0px 0px;font-size:12.800000190734863px"></div></div></div></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>