<html><head><style>
body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}
h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}
h1 {
        color: #000000;
        font-size: 28pt;
}
h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}
h3 {
        font-size: 18px;
}
h4 {
        font-size: 16px;
}
h5 {
        font-size: 14px;
}
h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}
hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
display: inherit;
}
p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}
a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}
#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}
button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}
code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}
code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}
pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}
pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}
#ws { background-color: #f8f8f8; }
.bloop_markdown table {
border-collapse: collapse;
font-family: Helvetica, arial, freesans, clean, sans-serif;
color: rgb(51, 51, 51);
font-size: 15px; line-height: 25px;
padding: 0; }
.bloop_markdown table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
.bloop_markdown table tr:nth-child(2n) {
background-color: #f8f8f8; }
.bloop_markdown table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
.bloop_markdown table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
.bloop_markdown table tr th :first-child, table tr td :first-child {
margin-top: 0; }
.bloop_markdown table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }
.bloop_markdown blockquote{
border-left: 4px solid #dddddd;
padding: 0 15px;
color: #777777; }
blockquote > :first-child {
margin-top: 0; }
blockquote > :last-child {
margin-bottom: 0; }
code, pre, #ws, #message {
word-break: normal;
word-wrap: normal;
}
hr {
display: inherit;
}
.bloop_markdown :first-child {
-webkit-margin-before: 0;
}
code, pre, #ws, #message {
font-family: Menlo, Consolas, Liberation Mono, Courier, monospace;
}
.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="bloop_markdown"><p>Iff we can omit <code>Foo</code> constructor for <code>let x: Foo = 42</code> then I’d give it +1</p>
<p>One could also completely fall back and construct these enums with labeled tuples:</p>
<pre><code class="swift">let a: Foo = 42 // constructs `Foo` case corresponding to `case (Int)`
let b: Foo = (label0: 0, labe1: "hello") // value of type Foo, 2nd case.
</code></pre>
<p>The former is needed for types like <code>Either<A, B></code>.</p>
<p>You could also add some kind of an attribute to an enum case with an associated value to allow implicit case anonymity, iff it’s not ambiguous with the other cases of the same enum.</p>
<pre><code class="swift">enum MyEnum {
@anonymous case string(String)
@anonymous case integer(Int)
case boolean(Bool)
}
let a: MyEnum = "foo" // implicit
let b: MyEnum = 42 // implicit
let c: MyEnum = .string("test") // explicit
let d: MyEnum = .boolean(true) // always explicit because that case is not anonymous
</code></pre>
<p></p></div><div class="bloop_original_html"><style>body{font-family:Helvetica,Arial;font-size:13px}</style><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div> <br> <div id="bloop_sign_1489040180793554944" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">-- <br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 9. März 2017 um 04:09:48, Daniel Duan via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>Hi all,<br><br>During review for the first revision of SE-0155, Dave Abraham suggested that we should allow enum cases without base names. So here’s a (rough) draft of a proposal for this feature. Please read and share your thoughts!<br><br># Anonymous Enum Cases<br><br>* Proposal: [SE-NNNN](NNNN-anonymous-enum-cases.md)<br>* Authors: [Daniel Duan](https://github.com/dduan)<br>* Review Manager: TBD<br>* Status: **Awaiting review**<br><br>## Introduction<br><br>This proposal adds anonymous cases to Swift's enum.<br><br>## Motivation<br><br>Naming things is a tough task for programmer. This is one merit of features such<br>as anonymous function and tuples: users can use them in a limited scope and skip<br>the mind burden of coming up with names. We can expand this convenience to enums<br>by allowing user to declare, construct and pattern match anonymous cases.<br><br>## Proposed solution<br><br>Add anonymous cases to Swift's enum.<br><br>## Detailed design<br><br>Anonymous enums can be declared with this syntax:<br><br>```swift<br>enum Foo {<br> case (Int)<br> case (label0: Int, label1: String)<br>}<br>```<br><br>Anonymous case without any associated values is not allowed.<br><br>Anonymous case values can be constructed with constructors with the enum's name<br>being their base name. Following the example:<br><br>```swift<br>Foo(42) // constructs `Foo` case corresponding to `case (Int)`<br>Foo(label0: 0, labe1: "hello") // value of type Foo, 2nd case.<br>Foo(label0: label1:)(0, "hello") // constructs the same value, SE-0155 syntax<br>```<br><br>For pattern matching, rules remain the same as regular cases, execpt, naturally,<br>the base name shall be skipped.<br><br>```swift<br>case .(let x) = Foo(42) // x has value 42<br>case .(label0: let a, label1: let b) = Foo(label0: 0, label1: "hello") // ok<br>```<br><br>## Source compatibility<br><br>This is additive. It's fully source compatible with Swift 3.<br><br>## Effect on ABI stability<br><br>This feature adds new possibilities to symbols exposed by enum declarations.<br><br>## Effect on API resilience<br><br>## Alternatives considered<br><br>It may seem "regular" to make user use `_` in place of base name in<br>declarations. The author think that's a perspective that only makes sense for<br>language designer/compiler implementors. To a user, the syntax chosen in this<br>proposal is clear and succinct.<br><br><br><br>_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>