[swift-evolution] [Proposal] Tuple Extensions

Joe Groff jgroff at apple.com
Tue May 3 23:47:31 CDT 2016


> On May 3, 2016, at 9:13 PM, Developer via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I’ve been contemplating this idea for a while now, mostly because I think it’s a very important feature, but also because I can’t find a single example of a programming language getting it completely right.  In Swift, the motif of tuples throughout the language would lead one to think that they have some kind of special status in the language.  Yet, tuples are an opaque concept exposed by the compiler to the end user with no opportunity for extension.  Languages that have tried to expose tuples to their users for extension have done so in less than ideal ways (see Tuple1-Tuple22 Scala, Haskell’s hard limit on tuples, Rust’s limitations for std::tuple), yet each implementation has something to offer a possible Swift implementation.  I see only one course of action that will bring us extensible tuples in a manner that is compatible with Swift and its overall design philosophy.  To that end, I have drawn up a draft proposal for generic tuple extensions that I will submit to swift-evolution shortly.  

Tuples are a special case of a more general shortcoming, which is that you can't extend *any* of the builtin structural types, not only tuples but metatypes, function types, and existentials. I don't see any reason to address this for tuples only. In the particular case of tuples, I think you really want variadic generic parameters too, to be able to extend them to arbitrary arities without having to waste space generating boilerplate for a bunch of fixed arities. Both structural type extensions and variadic generics are covered in Doug's omnibus generics roadmap: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160229/011666.html

-Joe


More information about the swift-evolution mailing list