[swift-evolution] Proposal: Remove implicit tuple splat behavior from function applications

Chris Lattner clattner at apple.com
Wed Jan 27 12:21:52 CST 2016


> On Jan 27, 2016, at 9:27 AM, Dave via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Fair enough. Can we get an explicit, well-designed version of this before we get rid of the implicit, poorly-designed version?

I’m certainly not opposed to someone exploring this, but I don’t think it should block removing the bad thing.

> I can’t recall off the top my head where, but I know I’ve done something like this:
> struct FunctionApplicator <T, U> {
>     var args: T
>     let function: T -> U
>     init(args: T, function: T -> U) {
>         self.args = args
>         self.function = function
>     }
>     func apply() -> U {
>         return function(args)
>     }
> }
> 
> Without tuple splatting, you’d need a FunctionApplicator1<T,U>, FunctionApplicator2<T,U,V>, FunctionApplicator3<T,U,V,W>, etc. They can’t even have the same name because Swift doesn’t support overloading type names for types with a different number of generic parameters.

Perhaps I’m misunderstanding, but that is certainly not the case.  Even without the feature in question you can definitely pass a tuple around as a single argument, e.g.:

func f(a : Int, _ b : Int) {…}

let x = FunctionApplicator((42, b: 19), f)

This functionality won’t be affected by removal of this feature.

-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160127/b6f899e3/attachment.html>


More information about the swift-evolution mailing list