<div dir="ltr">Definitely a +1, this clarifies intent, but enums are used a lot in swift code, and considering this is a source breaking change I&#39;m not sure if many users of swift are going to be positive about this.<br><div class="gmail_extra"><br><div class="gmail_quote">On 17 January 2017 at 02:32, David Waite via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Or perhaps paint the bikeshed <div><br></div><div>enum Something&lt;(Int32, Int32)&gt; { … }<div><br></div><div>-DW<br><div><blockquote type="cite"><div><div class="h5"><div>On Jan 16, 2017, at 11:51 AM, Anton Zhilin via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br class="m_-2802832713784090717Apple-interchange-newline"></div></div><div><div><div class="h5"><div dir="ltr"><div class="m_-2802832713784090717markdown-here-wrapper"><p style="margin:0px 0px 1.2em!important">This idea by Karl made me branch off a new thread.</p><p style="margin:0px 0px 1.2em!important">2017-01-16 21:28 GMT+03:00 Karl Wagner &lt;<a href="mailto:razielim@gmail.com" target="_blank">razielim@gmail.com</a>&gt;:</p><div style="margin:0px 0px 1.2em!important"><br class="m_-2802832713784090717webkit-block-placeholder"></div><div class="m_-2802832713784090717markdown-here-exclude"><div><br class="m_-2802832713784090717webkit-block-placeholder"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div dir="auto" style="word-wrap:break-word"><div>It would be helpful for synthesised RawRep conformance. The inheritance-like syntax we have now is awful - it makes people think that RawRepresentable is some kind of magic protocol that will allow special compiler jango to happen.</div><div><br></div><div>You could see why they think that. This looks very much like the enum is going to *be* an Int32:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="Courier">enum Something: Int32 {</font></div><div><font face="Courier">    case oneThing = 36</font></div><div><font face="Courier">    case anotherThing = 42</font></div><div><font face="Courier">}</font></div><div><font face="Courier"><br></font></div></blockquote>This is also one of the icky parts to allowing tuples of integer/string literals (something people ask for quite a lot). It would look like you’re deriving your enum from a non-nominal type:<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="Courier">enum Something: (Int32, Int32) {</font></div><div><font face="Courier">    case oneThing = (3, 12)</font></div><div><font face="Courier">    case anotherThing = (5, 9)</font></div><div><font face="Courier">}</font></div></blockquote></div></div></blockquote><div><br class="m_-2802832713784090717webkit-block-placeholder"></div></div><div style="margin:0px 0px 1.2em!important"><br class="m_-2802832713784090717webkit-block-placeholder"></div><p style="margin:0px 0px 1.2em!important">Even if Swift gains <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">newtype</code>, it’s not that case. The enum does not gain methods or behavior of the specified type. It’s just a shorthand, hinting the compiler to provide correct <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">RawRepresentable</code> conformance.</p><p style="margin:0px 0px 1.2em!important">I suggest to invent a new syntax for this type hinting for <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">RawRepresentable</code>. For example, it can be an annotation:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">@raw(Int32) enum Something {
    // ...
}
</code></pre><p style="margin:0px 0px 1.2em!important">Or a contextual keyword:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">enum Something : raw(Int32) {
    // ...
}
</code></pre><p style="margin:0px 0px 1.2em!important">Perhaps, he most uniform and explicit of syntaxes:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">enum Something : RawRepresentable {
    case oneThing = 36
    case anotherThing = 42
}

enum AnotherThing : RawRepresentable {
    typealias RawValue = Int32
    case oneThing
    case anotherThing
}
</code></pre><div title="MDH:PGRpdj5UaGlzIGlkZWEgYnkgS2FybCBtYWRlIG1lIGJyYW5jaCBvZmYgYSBuZXcgdGhyZWFkLjwv
ZGl2PjxkaXY+PGJyPjwvZGl2PjIwMTctMDEtMTYgMjE6MjggR01UKzAzOjAwIEthcmwgV2FnbmVy
wqA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzpyYXppZWxpbUBnbWFpbC5jb20i
IHRhcmdldD0iX2JsYW5rIj5yYXppZWxpbUBnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj46PGJsb2Nr
cXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDBweCAwLjhl
eDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMjA0LCAyMDQsIDIwNCk7IHBhZGRpbmctbGVm
dDogMWV4OyI+PGRpdiBzdHlsZT0id29yZC13cmFwOiBicmVhay13b3JkOyI+PGRpdiBkaXI9ImF1
dG8iIHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij48ZGl2Pkl0IHdvdWxkIGJlIGhlbHBm
dWwgZm9yIHN5bnRoZXNpc2VkIFJhd1JlcCBjb25mb3JtYW5jZS4gVGhlIGluaGVyaXRhbmNlLWxp
a2Ugc3ludGF4IHdlIGhhdmUgbm93IGlzIGF3ZnVsIC0gaXQgbWFrZXMgcGVvcGxlIHRoaW5rIHRo
YXQgUmF3UmVwcmVzZW50YWJsZSBpcyBzb21lIGtpbmQgb2YgbWFnaWMgcHJvdG9jb2wgdGhhdCB3
aWxsIGFsbG93IHNwZWNpYWwgY29tcGlsZXIgamFuZ28gdG8gaGFwcGVuLjwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+WW91IGNvdWxkIHNlZSB3aHkgdGhleSB0aGluayB0aGF0LiBUaGlzIGxvb2tz
IHZlcnkgbXVjaCBsaWtlIHRoZSBlbnVtIGlzIGdvaW5nIHRvICpiZSogYW4gSW50MzI6PC9kaXY+
PGRpdj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAwcHggNDBw
eDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48ZGl2Pjxmb250IGZhY2U9IkNvdXJpZXIi
PmVudW0gU29tZXRoaW5nOiBJbnQzMiB7PC9mb250PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0iQ291
cmllciI+Jm5ic3A7ICZuYnNwOyBjYXNlIG9uZVRoaW5nID0gMzY8L2ZvbnQ+PC9kaXY+PGRpdj48
Zm9udCBmYWNlPSJDb3VyaWVyIj4mbmJzcDsgJm5ic3A7IGNhc2UgYW5vdGhlclRoaW5nID0gNDI8
L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJDb3VyaWVyIj59PC9mb250PjwvZGl2PjxkaXY+
PGZvbnQgZmFjZT0iQ291cmllciI+PGJyPjwvZm9udD48L2Rpdj48L2Jsb2NrcXVvdGU+VGhpcyBp
cyBhbHNvIG9uZSBvZiB0aGUgaWNreSBwYXJ0cyB0byBhbGxvd2luZyB0dXBsZXMgb2YgaW50ZWdl
ci9zdHJpbmcgbGl0ZXJhbHMgKHNvbWV0aGluZyBwZW9wbGUgYXNrIGZvciBxdWl0ZSBhIGxvdCku
IEl0IHdvdWxkIGxvb2sgbGlrZSB5b3XigJlyZSBkZXJpdmluZyB5b3VyIGVudW0gZnJvbSBhIG5v
bi1ub21pbmFsIHR5cGU6PGRpdj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbjog
MHB4IDBweCAwcHggNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48ZGl2Pjxmb250
IGZhY2U9IkNvdXJpZXIiPmVudW0gU29tZXRoaW5nOiAoSW50MzIsIEludDMyKSB7PC9mb250Pjwv
ZGl2PjxkaXY+PGZvbnQgZmFjZT0iQ291cmllciI+Jm5ic3A7ICZuYnNwOyBjYXNlIG9uZVRoaW5n
ID0gKDMsIDEyKTwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9IkNvdXJpZXIiPiZuYnNwOyAm
bmJzcDsgY2FzZSBhbm90aGVyVGhpbmcgPSAoNSwgOSk8L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBm
YWNlPSJDb3VyaWVyIj59PC9mb250PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48L2Rpdj48L2Js
b2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+PGRpdj5FdmVuIGlmIFN3aWZ0IGdhaW5zIGBuZXd0eXBl
YCwgaXQncyBub3QgdGhhdCBjYXNlLiBUaGUgZW51bSBkb2VzIG5vdCBnYWluIG1ldGhvZHMgb3Ig
YmVoYXZpb3Igb2YgdGhlIHNwZWNpZmllZCB0eXBlLiBJdCdzIGp1c3QgYSBzaG9ydGhhbmQsIGhp
bnRpbmcgdGhlIGNvbXBpbGVyIHRvIHByb3ZpZGUgY29ycmVjdCBgUmF3UmVwcmVzZW50YWJsZWAg
Y29uZm9ybWFuY2UuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIHN1Z2dlc3QgdG8gaW52ZW50
IGEgbmV3IHN5bnRheCBmb3IgdGhpcyB0eXBlIGhpbnRpbmcgZm9yIGBSYXdSZXByZXNlbnRhYmxl
YC4gRm9yIGV4YW1wbGUsIGl0IGNhbiBiZSBhbiBhbm5vdGF0aW9uOjwvZGl2PjxkaXY+PGJyPjwv
ZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj5AcmF3KEludDMyKSBlbnVtIFNvbWV0aGluZyB7PC9kaXY+
PGRpdj4mbmJzcDsgJm5ic3A7IC8vIC4uLjwvZGl2PjxkaXY+fTwvZGl2PjxkaXY+YGBgPC9kaXY+
PGRpdj48YnI+PC9kaXY+PGRpdj5PciBhIGNvbnRleHR1YWwga2V5d29yZDo8L2Rpdj48ZGl2Pjxi
cj48L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+ZW51bSBTb21ldGhpbmcgOiByYXcoSW50MzIpIHs8
L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgLy8gLi4uPC9kaXY+PGRpdj59PC9kaXY+PGRpdj5gYGA8
L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlBlcmhhcHMsIGhlIG1vc3QgdW5pZm9ybSBhbmQgZXhw
bGljaXQgb2Ygc3ludGF4ZXM6PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2
PmVudW0gU29tZXRoaW5nIDogUmF3UmVwcmVzZW50YWJsZSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5i
c3A7IGNhc2Ugb25lVGhpbmcgPSAzNjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBjYXNlIGFub3Ro
ZXJUaGluZyA9IDQyPC9kaXY+PGRpdj59PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5lbnVtIEFu
b3RoZXJUaGluZyA6IFJhd1JlcHJlc2VudGFibGUgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyB0
eXBlYWxpYXMgUmF3VmFsdWUgPSBJbnQzMjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBjYXNlIG9u
ZVRoaW5nPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IGNhc2UgYW5vdGhlclRoaW5nPC9kaXY+PGRp
dj59PC9kaXY+PGRpdj5gYGA8L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div></div></div><span class="">
______________________________<wbr>_________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br></span></div></blockquote></div><br></div></div></div><br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><font color="#999999" size="2" face="georgia, serif"><i>Pranshu Goyal</i></font></div></div>
</div></div>