[swift-evolution] [Discussion] What is the future of tuples in Swift?

Adrian Zubarev adrian.zubarev at devandartist.com
Wed Mar 1 03:24:48 CST 2017

Hi Swift community,

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.

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.

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.

Could we make tuples as *extensible* value types?
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.
If a tuple contains a specific, ordered set of types we could probably make it conditional conforming to protocols like Sequence or Collection to easily convert it to an array or any other type that accepts such existential.
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_ (label1: Int, String), but I’d like to open the door for an additional more flexible way to create tuples.

typealias MyTuple<T> = tuple {
  vector String,  // same as `String…`
  vector(10) Bool // fixed length of 10 booleans

typealias MyTuple<T> = (T, Int, vector String, vector(10) Bool)

extension MyTuple : MyProtocol { ... }
Your feedback and ideas of the future of tuples is much appreciated.

Adrian Zubarev
Sent with Airmail
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170301/9ac84178/attachment.html>

More information about the swift-evolution mailing list