Proposal: Adding on

Henning Thielemann lemming at henning-thielemann.de
Fri Nov 3 06:46:31 EST 2006


On Thu, 2 Nov 2006, Nils Anders Danielsson wrote:

> The function on defined by
> 
> (*) `on` f = \x y -> f x * f y
> 
> is convenient when using functions like sortBy: sortBy (compare `on`
> fst), for example. It also makes the code more readable.
> 
> Furthermore I consider on to be above the Fairbairn threshold, since
> * we get rid of two lambdas,
> * we get rid of the duplication of p,
> * on has some nice algebraic properties (documented in the patch)
> * and, most importantly, it is easier at a glance to understand
>   (*) `on` p than to understand \x y -> p x * p y (assuming one knows
>   about on).

This reminds me on an earlier discussion:
 http://www.haskell.org/pipermail/libraries/2005-March/003431.html


I expect, that all constructs of a "*By" list function with "on" and
"comparing" are only efficient, if "f" is cheap. That's why I have defined
functions and called them *Key functions, which buffer the results of "f".
I attached the Key suffix in order to show that these functions sort,
group, remove duplicates and so on with respect to a key. I called my "on"  
"composeDouble":
 http://cvs.haskell.org/darcs/htam/src/Useful.hs


More information about the Libraries mailing list