[swift-evolution] [Review] SE-0110: Distinguish between single-tuple and multiple-argument function types

Vladimir.S svabox at gmail.com
Thu Jun 30 17:10:09 CDT 2016


On 01.07.2016 0:17, Austin Zheng wrote:
> #1 was discussed in this
> thread: http://thread.gmane.org/gmane.comp.lang.swift.evolution/16190.
> According to Chris, "FWIW, Swift 1 supported tuple destructuring in
> parameter lists, and we took it out to simplify the language and eliminate
> special cases."

OK. Got it.

>
> #2 may or may not naturally fall out of fixing the ambiguity. If it
> doesn't, the proposal should definitely add it.

I just think that it is worth to mention how the function type with 
multiply arguments represented currently.

>
> For #3, I would personally take the same approach as when tuple splat and
> explicit currying were removed: it's pretty easy to manually write a
> wrapper to convert between the old form and new form, so explicit bridging
> support isn't worthwhile:
>
> func tupleize<T, U, V, R>(_ original: (T, U, V) -> R) -> ((T, U, V)) -> R {
>   return { x in
>     return original(x.0, x.1, x.2)
>   }
> }
>

Currently there could be a lot of code that relies on current behavior, so 
IMO we should provide a easy way to convert to Swift 3.0. I feel like 
explicit bridging the best solution here.
But from other point of view, Swift 3 is source breaking release anyway and 
one will just need to change tuple to list of parameters (or vice-versa) in 
code to conform to correct type of function.

>
> Best,
> Austin
>
> On Thu, Jun 30, 2016 at 2:02 PM, Vladimir.S via swift-evolution
> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>
>     Just want to brought some things/questions that was not reflected in
>     proposal and that I think should be mentioned:
>
>     1. Should we be able to have such syntax to de-couple tuple's values in
>     parameter of closure:
>
>     let a : ((Int, Int, Int)) -> Int = { ((x, y, z)) in return x + y + z }
>
>     or only as single parameter
>
>     let a : ((Int, Int, Int)) -> Int = { x in return x.0 + x.1 + x.2 }
>
>
>     2. Currently type of `(Int,Int)->()` is actually `((Int,Int))->()`
>
>     typealias t1 = (Int, Int) -> Int
>     print(t1.self) // ((Int, Int)) -> Int
>
>     the proposal should change this to:
>
>     print(t1.self) // (Int, Int) -> Int
>     where `((Int, Int)) -> Int` means one tuple argument
>
>
>     3. It seems like we should keep the ability to explicitly convert one
>     function type to another as some(many?) code can depend on this current
>     behavior and so we need a way to convert old code to new.
>
>     I.e. I think such construction should work:
>
>     var a : ((Int, Int, Int)) -> Int = { x in return x.0 + x.1 + x.2 }
>
>     a = { x, y, z in return x + y + z} as ((Int, Int, Int)) -> Int
>
>     and
>
>     var b : (Int, Int, Int) -> Int = { x, y, z in return x + y + z }
>
>     b = { x in return x.0 + y.1 + z.2} as (Int, Int, Int) -> Int
>
>
>     Opinions/thoughts?
>
>
>     On 30.06.2016 21:22, Chris Lattner via swift-evolution wrote:
>
>         Hello Swift community,
>
>         The review of "SE-0110: Distinguish between single-tuple and
>         multiple-argument function types" begins now and runs through July
>         4. The proposal is available here:
>
>
>         https://github.com/apple/swift-evolution/blob/master/proposals/0110-distingish-single-tuple-arg.md
>
>         Reviews are an important part of the Swift evolution process. All
>         reviews should be sent to the swift-evolution mailing list at
>
>                 https://lists.swift.org/mailman/listinfo/swift-evolution
>
>         or, if you would like to keep your feedback private, directly to
>         the review manager.
>
>         What goes into a review?
>
>         The goal of the review process is to improve the proposal under
>         review through constructive criticism and contribute to the
>         direction of Swift. When writing your review, here are some
>         questions you might want to answer in your review:
>
>                 * What is your evaluation of the proposal?
>                 * Is the problem being addressed significant enough to
>         warrant a change to Swift?
>                 * Does this proposal fit well with the feel and direction
>         of Swift?
>                 * If you have used other languages or libraries with a
>         similar feature, how do you feel that this proposal compares to those?
>                 * How much effort did you put into your review? A glance, a
>         quick reading, or an in-depth study?
>
>         More information about the Swift evolution process is available at
>
>                 https://github.com/apple/swift-evolution/blob/master/process.md
>
>         Thank you,
>
>         -Chris Lattner
>         Review Manager
>
>
>         _______________________________________________
>         swift-evolution mailing list
>         swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>         https://lists.swift.org/mailman/listinfo/swift-evolution
>
>     _______________________________________________
>     swift-evolution mailing list
>     swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>     https://lists.swift.org/mailman/listinfo/swift-evolution
>
>


More information about the swift-evolution mailing list