[swift-evolution] [Discussion] Sortable Attribute

David Rönnqvist david.ronnqvist at gmail.com
Wed Aug 17 03:12:47 CDT 2016


Haskell also has a `comparing` function

    comparing :: (Ord a) => (b -> a) -> b -> b -> Ordering

which applies a function on both the left hand side and the right hand side to get two values that can be compared/ordered. 
This makes the call site look something like this:

    sortBy (comparing length) names

The same can be done in Swift, resulting in a similar and very English-like calls site:

    names.sort(by: comparing { $0.characters.count })

That said. While this (the `comparing` function) is a fun exercise in higher order functions, a more Swifty syntax for this is probably a separate overload of the sort/ed/ function.

- David

> On 17 Aug 2016, at 02:17, Silvan Mosberger via swift-evolution <swift-evolution at swift.org> wrote:
> 
>> I'd be in favor. We'd need another name, since the current closure predicate is already standardized to `by:`.
> 
> Haskell uses "on" for sorting with a mapping. There are both
> 
> sortOn <> :: Ord <http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Ord.html#t:Ord> b => (a -> b) -> [a] -> [a]
> 
> and
> 
> sortBy <> :: (a -> a -> Ordering <http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Ord.html#t:Ordering>) -> [a] -> [a]
> 
> in Haskell.
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160817/66617c76/attachment.html>


More information about the swift-evolution mailing list