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

Michael Henson mikehenson at gmail.com
Fri Feb 5 21:22:48 CST 2016


After splatting is removed, what will happen in cases where function
arguments are implicitly converted to tuples, as in this code (in the
repl)?

  3> func compose<A,B,C>(f:(A)->B, g:(B)->C) -> (A)->C {
  4.     return { (_ arg: A) in
  5.         return g(f(arg))
  6.     }
  7. }
  8>
  9>
 10> func f(a: Int, b: String) -> String {
 11.     return "Composed!"
 12. }
 13>
 14> func g(x: String) -> Int {
 15.     return x.characters.count
 16. }
 17>
 18> let c = compose(f, g:g)
c: (Int, b: String) -> Int = 0x00007ffff7ff28d0
 19>
 20> c
$R0: (Int, b: String) -> Int = 0x00007ffff7ff28d0
 21>
 22> c((9,b:"Wat"))
$R1: Int = 9
 23>
 24> c(9, b:"Wat")
repl.swift:24:8: error: extra argument 'b' in call
c(9, b:"Wat")
       ^~~~~

Mike

>* On Jan 31, 2016, at 5:00 PM, Kevin Ballard via swift-evolution <swift-evolution at swift.org <https://lists.swift.org/mailman/listinfo/swift-evolution>> wrote:
*> >* +1 in general, though I do wonder how this change will affect
generic code. For example, if I have a function that returns a tuple,
and another function that takes an argument list matching the same
tuple type, can I still use generic functions like map() to call the
second function with the tuple from the first? I'm hoping the answer
is "yes", because the type of a function doesn't distinguish between
functions that take multiple arguments vs functions that take a single
argument of tuple type and so passing functions around as first-class
values should be fine. Although I imagine this change will still
prevent me from writing a closure like { funcOfTwoArgs($0) } which is
unfortunate, but would be solved by a subsequent proposal to add an
explicit splat operator.
*
Yes, AFAIK, generic code isn’t affected by the proposed change.  Type
checking of generic code is modular, not aware of the concrete types
the generic is instantiated with.

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


More information about the swift-evolution mailing list