<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>Hi Swift community,</p>

<p>I’d love to discuss with you the future of tuples in Swift. I’m really curious whether tuples will ever evolve beyond their current state or not.</p>

<p>Last year we revamped custom operators with a whole new syntax in Swift, so why don’t we start a discussion on how tuples could evolve to enhance the language.</p>

<p>Currently tuples are a fixed and ordered set of types, which has only one syntactic sugar feature to provide a better way of accessing the stored vales. I was referring to labeled tuples. And that’s pretty much it what tuples provides for us up until now. Tuple is a primitive type, but so are structs, enums, string, character and number types in different languages. In Swift we have way more powerful primitive types, but we’d like to call them value types instead.</p>

<ul>
<li>Could we make tuples as *extensible* value types?</li>
<li>Can we vectorize tuples with fixed and unbound length of types? Speaking of which, variadics share a similar fashion of providing an unbound ordered set of types, which could be more generalized with tuples. Beyond that, vectorized tuples could probably play well with generic variadics, and we also would have the ability to limit the number of types with tuple related constraints.</li>
<li>If a tuple contains a specific, ordered set of types we could probably make it conditional conforming to protocols like <code>Sequence</code> or <code>Collection</code> to easily convert it to an array or any other type that accepts such existential.</li>
</ul>

<p>The following snippet is not a design of *new* tuples nor something I’d propose at this moment, but a simple sketch to memorize what we could do to tuples. However I’m not proposing to change the current syntax for tuples, lets call it _shorthand-syntax_ <code>(label1: Int, String)</code>, but I’d like to open the door for an additional more flexible way to create tuples.</p>

<pre><code class="swift">typealias MyTuple&lt;T&gt; = tuple {
  T,
  Int,
  vector String,  // same as `String…`
  vector(10) Bool // fixed length of 10 booleans
}

typealias MyTuple&lt;T&gt; = (T, Int, vector String, vector(10) Bool)

extension MyTuple : MyProtocol { ... }
</code></pre>

<p>Your feedback and ideas of the future of tuples is much appreciated. </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_1488357612900721152" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div></div><div class="bloop_markdown"><p></p></div></body></html>