
#12044: Remove sortWith in favor of sortOn -------------------------------------+------------------------------------- Reporter: cblp | Owner: cblp Type: feature request | Status: patch Priority: normal | Milestone: Component: libraries/base | Version: 7.10.3 Resolution: | Keywords: newcomer Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Other | Test Case: Blocked By: | Blocking: Related Tickets: #2659 | Differential Rev(s): Phab:D2587 Wiki Page: | -------------------------------------+------------------------------------- Changes (by bgamari): * owner: vkonton => cblp Comment: It's really not clear to me that this is actually a refactoring that we would want to undertake. While `sortOn` and `sortWith` are semantically equivalent, they are operationally much different. Namely, for "cheap" mapping functions (e.g. projections like `fst`) `sortOn` will allocate significantly more than `sortWith`. Consider the case of, {{{#!hs x :: [(Int, String)] x = ... by = sortBy (comparing fst) x on = sortOn fst }}} The evaluation of `on` will allocate a list of type `[(Int, (Int, String))]`, `sortBy (comparing fst)` that intermediate list, and then project back to a `[(Int, String)]`. It seems to me like this would be quite undesirable. While we may not want to deprecate `GHC.Exts.sortWith` in favor of `sortOn` in particular, perhaps we want to deprecate it nevertheless. The more standard form `sortBy (comparing f)` is only a bit longer and arguably you should be forced to consider whether or not you want to use `sortOn` instead. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12044#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler