<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>Fair point, the more and more I’m thinking about default values, the more I’m convinced here.</p>

<p>And yes, as I mentioned before, default value would solve the problem in my API. I’m thinking of adapting the pitched idea so I almost get the right behaviour for free when Swift 4 drops.</p>

<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_1480500747365548032" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 30. November 2016 um 04:32:17, Karl (<a href="mailto:razielim@gmail.com">razielim@gmail.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div></div><div>



<title></title>


<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On 29 Nov 2016, at 18:41, Tony Allevato 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="">Default values and overloaded cases don't
(and in fact, shouldn't) be conflated.
<div class=""><br class=""></div>
<div class="">I support default values for associated values but
I'm not yet ready to say I'm in favor of overloaded cases. There's
no ambiguity because your Value.number example can't exist without
overloads, and default values don't create parameter lists that
could mismatch like that (there's still only one case, and it has
all of the associated values regardless of how many you specify at
the time you create it).</div>
<div class=""><br class=""></div>
<div class="">Small self-contained examples like Value are nice,
but entirely hypothetical and a bit contrived. "Maybe the design of
the API does not want something" is difficult to convince me—I'd
prefer to see a significant real world situation where it's vital
to have two cases with the same name with differently typed
payloads, which can't be expressed in a different way. For example,
in your Javascript example, I think the optionality of that
Document would be far better expressed as an
Optional&lt;Document&gt; with a default value of nil than creating
an overload, and that solution introduces far less complexity to
the language than would introducing arbitrary overloads.</div>
</div>
</div>
</blockquote>
<br class=""></div>
<div>Yeah, we shouldn’t confuse these issues. Default values for
enum payloads are something I also really want (in Swift 4 phase
2). Here’s my use-case:</div>
<div><br class=""></div>
<div>
<pre style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; margin-bottom: 0px; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal; color: rgb(51, 51, 51);" class=""><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">public</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">enum</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">ReadError</span> : <span class="pl-e" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">Error</span> </span>{
    <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">case</span> <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">otherError</span>(<span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">description</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">String</span>, <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);"><span class="pl-smi" style="box-sizing: border-box; color: rgb(51, 51, 51);">location</span></span>: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">StaticString</span><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">?</span> = #function) <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// &lt;- currently an error, tuples can't have default values</span>
}</pre>
<div class=""><br class=""></div>
</div>
<div class="">And yes, you can use #function as a default
value:</div>
<div class=""><br class=""></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class="">
<div class=""><font face="Courier" class="">func doIt(_ str: String
= #function) {</font></div>
<div class=""><font face="Courier" class="">&nbsp;print("Called
from \(str)")&nbsp;</font></div>
<div class=""><font face="Courier" class="">}</font></div>
<div class=""><font face="Courier" class="">func myFunc() { doIt()
}</font></div>
<div class=""><font face="Courier" class=""><br class=""></font></div>
<div class=""><font face="Courier" class="">doIt() &nbsp; &nbsp;//
Prints “Called from __lldb_expr_1” in REPL</font></div>
<div class=""><font face="Courier" class="">myFunc() &nbsp;//
Prints “Called from myFunc()”</font></div>
<div class=""><font face="Courier" class=""><br class=""></font></div>
</blockquote>
<div class=""><br class=""></div>
I think that’s a more valuable use-case than overloaded values; so
if they’re incompatible and we have to choose one, I’d go for
default values.
<div class=""><br class=""></div>
<div class="">- Karl</div>


</div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>