I agree this seems like a pretty serious oversight. This is very un-swifty. 
Currying at one time was touted as a language feature, now it is more of an 
afterthought.

-Jon

From: 
<[email protected]<mailto:[email protected]>> 
on behalf of Erica Sadun via swift-evolution 
<[email protected]<mailto:[email protected]>>
Reply-To: Erica Sadun <[email protected]<mailto:[email protected]>>
Date: Tuesday, October 4, 2016 at 09:21
To: swift-evolution 
<[email protected]<mailto:[email protected]>>
Subject: [swift-evolution] SE-0111 and Curried argument labels: Unintended 
Consequences

SE-0111 established that Swift's type system would not allow function argument 
labels to be expressed as part of a function type. As I've been working with 
curried functions, I'm discovering an unintended consequence of this proposal 
in that it strips curried functions of their external labels and the resulting 
calls of their readability.

```
public func projected(
    function f: @escaping (CGFloat) -> CGFloat) ->
    (_ p0: CGPoint, _ p1: CGPoint) ->
    (_ percent: CGFloat) -> CGPoint
{
```

Calling the first level of currying still reads acceptably:

```
let projectedFunction = projected(function: fToApply)
```

But after that, the enforced label-less arguments mean all further semantics 
have to stay within the name of the assigned partially applied function symbol 
and all arguments must be supplied without meaning, which is not in the spirit 
of API guidelines or under the umbrella of Swiftiness:

```
let fixedFunction = projectedFunction(p0, p1)
let value = fixedFunction(0.2)
```

There's no way to give either the line segment start and end points or the 
percent-of-progress arguments any labels.  Further, Xcode/QuickHelp does not 
provide any support for documenting the roles of each curried return type.

Could this be addressed specifically for currying or has the boat sailed 
forever on this topic?

-- E

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to