This seems to be a very nice addition to the language! And I totally agree with:
In my opinion this design also fits well with my latest document on variadic generics, in which I'm proposing the variadic
keyword to create a VG:
// Old fashioned way: a function that accepts one or more `P`s, all of the
// same concrete type. `values` is an `Array` inside the function.
func variadicFn1<P: SomeProto>(_ values: P...) { }
// Proposed syntax: a function that accepts a list of `P`s as a real list, as
// an array literal or as an `Array` instance (all values have the same
// concrete type). `values` is an `Array` inside the function.
func variadicFn2<P: SomeProto>(_ values: variadic [P]) { }
// Proposed syntax: a function that accepts a dictionary from `String`s to
// `P`s as a real list (with labels), as a dictionary literal or as a `Dictionary`
// instance (all values have the same concrete type). `values` is a
// `Dictionary` inside the function.
func variadicFn3<P: SomeProto>(_ values: variadic [String: P]) { }
// Variadic Generics syntax: a function that accepts one or more `P`s,
// all of potentially different concrete types. `values` is a "pack of values"
// (strawman WIP name) inside the function.
func variadicFn4<variadic P: SomeProto>(_ values: P) { }