<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 have completed a draft of a proposal to move the `*LiteralConvertible` protocols into a `Syntax` namespace as suggested by the standard library team. <div class=""><br class=""></div><div class="">The draft can be found here: <a href="https://gist.github.com/anandabits/99dad2305d310874bd613b72b14eee56" class="">https://gist.github.com/anandabits/99dad2305d310874bd613b72b14eee56</a>. It is also included below.</div><div class=""><br class=""></div><div class="">I will submit a PR in the next day or two after incorporating any feedback.</div><div class=""><br class=""></div><div class="">-Matthew</div><div class=""><br class=""></div><div class=""><h1 id="literalsyntaxprotocols" style="font-size: 37px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Literal Syntax Protocols</h1><ul style="margin-top: 21px; margin-bottom: 21px; padding-left: 1.5em; color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; font-size: 15px;" class=""><li style="font-size: 17px;" class="">Proposal: <a href="file:///Users/Matthew/Library/Containers/com.brettterpstra.marked2/Data/Library/Caches/Marked%202/Watchers/NNNN-literal-syntax-protocols.md" style="color: rgb(13, 110, 161); text-decoration: none; transition: color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out;" class="">SE-NNNN</a></li><li style="font-size: 17px;" class="">Author: <a href="https://github.com/anandabits" style="color: rgb(13, 110, 161); text-decoration: none; transition: color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out;" class="">Matthew Johnson</a></li><li style="font-size: 17px;" class="">Status: <strong style="line-height: 1;" class="">Awaiting review</strong></li><li style="font-size: 17px;" class="">Review manager: TBD</li></ul><h2 id="introduction" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Introduction</h2><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">This proposal renames the <code style="line-height: 1;" class="">*LiteralConvertible</code> protocols to <code style="line-height: 1;" class="">Syntax.*Literal</code>. </p><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">Swift-evolution thread: <a href="http://thread.gmane.org/gmane.comp.lang.swift.evolution/21290" style="color: rgb(13, 110, 161); text-decoration: none; transition: color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out;" class="">Revisiting SE–0041 Names</a></p><h2 id="motivation" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Motivation</h2><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">The standard library currently has protocols that use the term <code style="line-height: 1;" class="">Convertible</code> in two different ways. The <code style="line-height: 1;" class="">*LiteralConvertible</code> protocols use the meaning of converting <em style="line-height: 1;" class="">from</em> a literal. The <code style="line-height: 1;" class="">Custom(Debug)StringConvertible</code> protocols use the meaning of converting <em style="line-height: 1;" class="">to</em> a <code style="line-height: 1;" class="">String</code>. This causes confusion for developers attempting to name their own protocols following the precedence established by the standard library.</p><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">Further, the standard library team has observed:</p><pre style="margin-top: 21px; margin-bottom: 21px; tab-size: 4; color: rgb(17, 17, 17); font-size: 15px;" class=""><code class="applescript hljs" style="line-height: inherit; display: block; padding: 0.5em; color: rgb(51, 51, 51); background-color: rgb(248, 248, 248); height: auto; background-position: initial initial; background-repeat: initial initial;">The <span class="hljs-string" style="color: rgb(221, 17, 68);">"literal"</span> protocols are <span class="hljs-keyword" style="font-weight: bold;">not</span> <span class="hljs-keyword" style="font-weight: bold;">about</span> conversion, they are <span class="hljs-keyword" style="font-weight: bold;">about</span> adopting a certain syntax provided <span class="hljs-keyword" style="font-weight: bold;">by</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> language. <span class="hljs-string" style="color: rgb(221, 17, 68);">"Convertible"</span> <span class="hljs-keyword" style="font-weight: bold;">in</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> <span class="hljs-property">name</span> <span class="hljs-keyword" style="font-weight: bold;">is</span> a red herring: a type can't be convertible <span class="hljs-keyword" style="font-weight: bold;">from</span> an <span class="hljs-type">integer</span> literal because there <span class="hljs-keyword" style="font-weight: bold;">is</span> no <span class="hljs-string" style="color: rgb(221, 17, 68);">"IntegerLiteral"</span> entity <span class="hljs-keyword" style="font-weight: bold;">in</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> type system. The literal *becomes* typed <span class="hljs-keyword" style="font-weight: bold;">as</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> corresponding literal type (e.g., Int <span class="hljs-keyword" style="font-weight: bold;">or</span> String), <span class="hljs-keyword" style="font-weight: bold;">and</span> <span class="hljs-keyword" style="font-weight: bold;">as</span> far <span class="hljs-keyword" style="font-weight: bold;">as</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> user <span class="hljs-keyword" style="font-weight: bold;">at</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> call site <span class="hljs-keyword" style="font-weight: bold;">is</span> concerned, there <span class="hljs-keyword" style="font-weight: bold;">is</span> no visible conversion (even <span class="hljs-keyword" style="font-weight: bold;">if</span> one <span class="hljs-keyword" style="font-weight: bold;">is</span> happening <span class="hljs-keyword" style="font-weight: bold;">behind</span> <span class="hljs-keyword" style="font-weight: bold;">the</span> scenes)
</code></pre><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class=""><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0041-conversion-protocol-conventions.md" style="color: rgb(13, 110, 161); text-decoration: none; transition: color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out;" class="">An earlier proposal</a> was intended to address the first problem by introducing strong naming conventions for three kinds of conversion protocols (<em style="line-height: 1;" class="">from</em>, <em style="line-height: 1;" class="">to</em>, and <em style="line-height: 1;" class="">bidirectional</em>). The review highlighted the difficulity in establishing conventions that everyone is happy with. This proposal takes a different approach to solving the problem that originally inspired that proposal while also solving the awkwardness of the current names described by the standard library team.</p><h2 id="proposedsolution" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Proposed solution</h2><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">This proposal addresses both problems by introducing a <code style="line-height: 1;" class="">Syntax</code> “namespace” and moving the <code style="line-height: 1;" class="">*LiteralConvertible</code> protocols into that “namespace” while also renaming them. The proposal <strong style="line-height: 1;" class="">does not</strong> make any changes to the requirements of the protocols.</p><h2 id="detaileddesign" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Detailed design</h2><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">All of the <code style="line-height: 1;" class="">*LiteralConvertible</code> protocols will receive new <code style="line-height: 1;" class="">*Literal</code> names inside a <code style="line-height: 1;" class="">Syntax</code>namespace. </p><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">This namespace will initially be implemented using a case-less <code style="line-height: 1;" class="">enum</code>, but this detail may change in the future if submodules or namespaces are added to Swift. Swift does not currently allow protocols to be declared inside the scope of a type. In order to work around this limitation the protocols themselves will be declared using underscore-prefixed names internal to the standard library. Typealiases inside the <code style="line-height: 1;" class="">Syntax</code> enum will declare the names intended to be visible to user code.</p><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">This proposal does not change any requirements of these protocols. All requirements of all <code style="line-height: 1;" class="">*LiteralConvertible</code> protocols will remain exactly the same.</p><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">The following protocol declarations and names:</p><pre style="margin-top: 21px; margin-bottom: 21px; tab-size: 4; color: rgb(17, 17, 17); font-size: 15px;" class=""><code class="swift hljs" style="line-height: inherit; display: block; padding: 0.5em; color: rgb(51, 51, 51); background-color: rgb(248, 248, 248); height: auto; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">NilLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">BooleanLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">FloatLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">IntegerLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">UnicodeScalarLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">ExtendedGraphemeClusterConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">StringLiteralLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">StringInterpolationLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">ArrayLiteralConvertible</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">DictionaryLiteralConvertible</span> </span>{ ... }</code></pre><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">Are changed as follows:</p><pre style="margin-top: 21px; margin-bottom: 21px; tab-size: 4; color: rgb(17, 17, 17); font-size: 15px;" class=""><code class="swift hljs" style="line-height: inherit; display: block; padding: 0.5em; color: rgb(51, 51, 51); background-color: rgb(248, 248, 248); height: auto; background-position: initial initial; background-repeat: initial initial;">
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_NilLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_BooleanLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_IntegerLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_FloatLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_UnicodeScalarLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_ExtendedGraphemeClusterLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_StringLiteralLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_StringInterpolationLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_ArrayLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">protocol</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">_DictionaryLiteralSyntax</span> </span>{ ... }
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;">/* closed */</span> <span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">enum</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">Syntax</span> </span>{
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">NilLiteral</span> = _NilLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">BooleanLiteral</span> = _BooleanLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">IntegerLiteral</span> = _IntegerLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">FloatLiteral</span> = _FloatLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">UnicodeScalarLiteral</span> = _UnicodeScalarLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">ExtendedGraphemeClusterLiteral</span> = _ExtendedGraphemeClusterLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">StringLiteralLiteral</span> = _StringLiteralLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">StringInterplolationLiteral</span> = _StringInterpolationLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">ArrayrLiteral</span> = _ArrayLiteralSyntax
<span class="hljs-keyword" style="font-weight: bold;">public</span> <span class="hljs-keyword" style="font-weight: bold;">typealias</span> <span class="hljs-type">DictionaryLiteral</span> = _DictionaryLiteralSyntax
}</code></pre><h2 id="impactonexistingcode" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Impact on existing code</h2><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">All code that references any of the <code style="line-height: 1;" class="">*LiteralConvertible</code> protocols will need to be modified to reference the protocol via the new <code style="line-height: 1;" class="">Syntax.*Literal</code> name.</p><h2 id="alternativesconsidered" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Alternatives considered</h2><h3 id="protocolnames" style="color: rgb(17, 17, 17); margin: 21px 0px; font-size: 20px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Protocol names</h3><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">Several commenters have suggested that the names in this proposal are confusing at the site of use:</p><pre style="margin-top: 21px; margin-bottom: 21px; tab-size: 4; color: rgb(17, 17, 17); font-size: 15px;" class=""><code class="swift hljs" style="line-height: inherit; display: block; padding: 0.5em; color: rgb(51, 51, 51); background-color: rgb(248, 248, 248); height: auto; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">struct</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">Foo</span>: <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">Syntax</span>.<span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">IntegerLiteral</span> </span>{ ... }</code></pre><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">One alternative naming scheme would emphasize the semantic of initializing the type with a literal:</p><pre style="margin-top: 21px; margin-bottom: 21px; tab-size: 4; color: rgb(17, 17, 17); font-size: 15px;" class=""><code class="swift hljs" style="line-height: inherit; display: block; padding: 0.5em; color: rgb(51, 51, 51); background-color: rgb(248, 248, 248); height: auto; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-class"><span class="hljs-keyword" style="font-weight: bold;">struct</span> <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">Foo</span>: <span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">Syntax</span>.<span class="hljs-title" style="color: rgb(68, 85, 136); font-weight: bold;">IntegerLiteralInitializable</span> </span>{ ... }</code></pre><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">Discussion of the pros and cons of the proposed and alternative naming schemes is encouraged. The core team should feel free to make a final decision on the exact naming scheme used if they choose to accept this proposal.</p><h3 id="previousproposal" style="color: rgb(17, 17, 17); margin: 21px 0px; font-size: 20px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Previous proposal</h3><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">This proposal is a follow up to <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0041-conversion-protocol-conventions.md" style="color: rgb(13, 110, 161); text-decoration: none; transition: color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out;" class="">Updating Protocol Naming Conventions for Conversions</a>. Many related alternatives were explored during the discussion and review of that proposal.</p><h2 id="acknowledgements" style="color: rgb(17, 17, 17); font-size: 27px; line-height: 42px; margin-top: 42px; margin-bottom: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;" class="">Acknowledgements</h2><p style="color: rgb(17, 17, 17); font-family: 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif; word-wrap: break-word; margin: 1.3125em 0px; font-size: 1.1429em; line-height: 1.3125em;" class="">The design described in this proposal was suggested by Dave Abrahams, Dmitri Gribenko, and Maxim Moiseev.</p></div></body></html>