> On Oct 5, 2016, at 8:15 AM, Jon Akhtar via swift-evolution 
> <[email protected]> wrote:
> 
> 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.

I see it as a feature that has mostly been removed in Swift 3: SE-0002 
<https://github.com/apple/swift-evolution/blob/master/proposals/0002-remove-currying.md>
 eliminating the syntax that defined curried functions, and SE-0042 
<https://github.com/apple/swift-evolution/blob/master/proposals/0042-flatten-method-types.md>
 eliminates the production of curried functions when referring to an instance 
member.  I think that’s because, as a language feature, currying wasn’t really 
carrying it’s conceptual weight: it wasn’t being used *that* often in practice, 
but—unless you’re already familiar with currying from another language—it’s a 
fairly complicated notion to understand, and Swift didn’t ever have a complete 
implementation of currying.

        - Doug

> 
> -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

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

Reply via email to