<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>T_T I’ve never said it will compile (the second time now), I’ve said couple of times its just future bikeshedding with variadic generics from the generics manifesto and variadic enum cases that I come up with.</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_1467380046567693824" 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 1. Juli 2016 um 15:33:41, Cao Jiannan 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 style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div></div><div>
<title></title>
<div class="">I can't compile your code. I'm really not sure your
code will pass the complex generic check 🙃</div>
<div class=""><br class=""></div>
<div class="">Union version more complex or generic
version?<br class=""></div>
<div class="">I think union version is more normal.</div>
<blockquote type="cite" class="">
<div class="">
<blockquote class="">
<p class="">For example:</p>
<p class="">typealias ABC = A | B | C</p>
<p class="">typealias ABCD = ABC | D</p>
<p class="">we just use an existed type ABC to construct ABCD</p>
<p class="">But how about generic wrap?</p>
</blockquote>
<p class="">Bikeshedding:</p>
<div class="highlight highlight-source-swift">
<pre class=""><span class="pl-c">// we generate the boundary with `A | B` or directly OneOf<A, B></span>
<span class="pl-k">enum</span> OneOf<span class="pl-k"><...</span>T<span class="pl-k">></span> {
<span class="pl-k">...</span><span class="pl-k">case</span> $#(T)
<span class="pl-c">// Bikeshedding variadic enum casses:</span>
<span class="pl-c">// we might need an index to set the value?</span>
<span class="pl-k">init</span>(index: <span class="pl-c1">Int</span>, value: T) {
<span class="pl-k">self</span> <span class="pl-k">=</span> <span class="pl-k">.</span>$index(value)
}
}
<span class="pl-c">/// Usage:</span>
<span class="pl-c">/// A | B | C == OneOf<A, B, C></span>
<span class="pl-k">func</span> <span class="pl-en">|</span><T, U>(_: T<span class="pl-k">.</span><span class="pl-k">Type</span>, _: U<span class="pl-k">.</span><span class="pl-k">Type</span>) <span class="pl-k">-></span> OneOf<T, U>.Type {
<span class="pl-c">// I believe the usage of `type` like this was prposed by Joe Groff</span>
<span class="pl-c">// I also use the proposal to remove `.self` magic here</span>
<span class="pl-k">return</span> OneOf<span class="pl-k"><</span>T, U<span class="pl-k">></span>
}
<span class="pl-c">// Here is how to merge OneOf into a single dimension</span>
<span class="pl-k">func</span> <span class="pl-en">|</span><<span class="pl-k">...</span>T, U>(_: OneOf<span class="pl-k"><...</span>T<span class="pl-k">>.</span><span class="pl-k">Type</span>, _: U<span class="pl-k">.</span><span class="pl-k">Type</span>) <span class="pl-k">-></span> OneOf<...T, U>.Type {
<span class="pl-c">// Copy and merge types into the new `OneOf` type</span>
<span class="pl-k">return</span> OneOf<span class="pl-k"><...</span>T, U<span class="pl-k">></span>
}
<span class="pl-k">func</span> <span class="pl-en">|</span><T, <span class="pl-k">...</span>U>(_: T<span class="pl-k">.</span><span class="pl-k">Type</span>, _: OneOf<span class="pl-k"><...</span>U<span class="pl-k">>.</span><span class="pl-k">Type</span>) <span class="pl-k">-></span> OneOf<T, ...U>.Type {
<span class="pl-c">// Copy and merge types into the new `OneOf` type</span>
<span class="pl-k">return</span> OneOf<span class="pl-k"><</span>T, <span class="pl-k">...</span>U<span class="pl-k">></span>
}
<span class="pl-k">func</span> <span class="pl-en">|</span><<span class="pl-k">...</span>T, <span class="pl-k">...</span>U>(_: OneOf<span class="pl-k"><...</span>T<span class="pl-k">>.</span><span class="pl-k">Type</span>, _: OneOf<span class="pl-k"><...</span>U<span class="pl-k">>.</span><span class="pl-k">Type</span>) <span class="pl-k">-></span> OneOf<...T, ...U>.Type {
<span class="pl-c">// Copy and merge types into the new `OneOf` type</span>
<span class="pl-k">return</span> OneOf<span class="pl-k"><...</span>T, <span class="pl-k">...</span>U<span class="pl-k">></span>
}</pre></div>
<p class="">Your example will become:</p>
<div class="highlight highlight-source-swift">
<pre class=""><span class="pl-k">typealias</span> ABC <span class="pl-k">=</span> A <span class="pl-k">|</span> B <span class="pl-k">|</span> C <span class="pl-c">// or OneOf<A, B, C></span>
<span class="pl-k">typealias</span> ABCD <span class="pl-k">=</span> ABC <span class="pl-k">|</span> D <span class="pl-c">// merging lhs OneOf with D to OneOf<A, B, C, D></span></pre></div>
<p class="">Mission accomplished.</p>
</div>
<div class=""><br class=""></div>
<div>
<blockquote type="cite" class="">
<div class="">在 2016年7月1日,17:06,Cao Jiannan <<a href="mailto:frogcjn@163.com" class="">frogcjn@163.com</a>> 写道:</div>
<br class="Apple-interchange-newline">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><a href="https://github.com/frogcjn/swift-evolution/blob/master/proposals/xxxx-union-type.md" class="">https://github.com/frogcjn/swift-evolution/blob/master/proposals/xxxx-union-type.md</a>
<div class=""><br class=""></div>
<div class="">
<div class="">Hi,</div>
<div class=""><br class=""></div>
<div class="">I'm now officially proposal the union type feature
for Swift. Please see:</div>
<div class=""><br class=""></div>
<br class="Apple-interchange-newline">
<a href="https://github.com/apple/swift/commit/eb7311de065df7ea332cdde8782cb44f9f4a5121" class="">https://github.com/apple/swift/commit/eb7311de065df7ea332cdde8782cb44f9f4a5121</a></div>
<div class="">
<h2 style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);" class="">Introduction</h2>
<p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);" class="">Add union type grammar, represents the type which is one
of other types.</p>
<div class="highlight highlight-source-swift" style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">
<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;" class=""><span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">var</span> stringOrURL: <span class="pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">String</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">|</span> URL <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">=</span> <span class="pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145);"><span class="pl-pds" style="box-sizing: border-box;">"</span><a href="https://www.apple.com/" class="">https://www.apple.com</a><span class="pl-pds" style="box-sizing: border-box;">"</span></span></pre></div>
<div class=""><br class=""></div>
<div class=""><br class=""></div>
<div class="">I would be thankful if someone support this idea and
give some advice. Thanks!</div>
<div class=""><br class=""></div>
<div class=""><br class=""></div>
<div class="">--</div>
</div>
<div class="">Jiannan</div>
<div class=""><br class=""></div>
<div class=""><br class=""></div>
</div>
</div>
</blockquote>
</div>
<br class=""></blockquote>
_______________________________________________<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>