I really like the idea and where this is going, thanks for writing this ![]()
I agree that ... syntax for type sequences might be confusing and ambiguous. I for one got a bit confused as I was reading some of the examples as if they were declaration for variadic arguments instead of type sequences sometimes, and I feel it'd be too easy to confuse them, while it's important to make clear that the different types in a T... type sequence are not necessary the same types each as opposed to variadic arguments.
I also found it a bit confusing to see typealias Element = (Sequences.Element...) in the zip example, as I was expecting the syntax to be more something like (Sequences...).Element or needing some usage of _mapTypeSequence here, as were effectively wanting the element of each archetype here.
Some alternatives I have in mind as an alternative to ... and to avoid ambiguity:
- postfix
*β ieT*. Would also maybe allow things liketypealias Element = Sequences*.Element - postfix
[]β ieT[]andtypealias Element = Sequences[].Element
Personal opinion on those:
- I like
*because it's common and would work well in conjunction to introducing a potential splat operator too using*too (a bit like in Ruby). - I like
[]because when I seefunc debugPrint<T[]>(_ x: T[])I think of the type sequence as being "a tuple(T0, T1, T2,β¦ Tn)" or(T[0], T[1], β¦ T[n])β as if those were mathematical subscripted variables, which acts as a reminder that each Tn can be different (as opposed to T... used as a variadic generic where they'd be all the same). - It would also open the door in the future to allow specifying an arity or even a range, eg
T[5]for a type sequence / tuple with 5 (possibly different) types,T[1...]for a type sequence of size at least 1, etc - But otoh for some subjective reason I feel like
(_ x: T[])is less suggestive of the method allowing a variable number of (potentially heterogeneous) arguments and instead suggests an arity of one there, while I somehow feel likeT*would make it more natural to read it as variadic arity (maybe that's my Ruby bias speaking here?)