Proposal: Adding on

Nils Anders Danielsson nad at
Thu Nov 2 12:00:36 EST 2006

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

The main question seems to be which module to put the function in.
Based on previous discussion on the libraries list I suggest creating
a new module Control.Function containing on plus (initially) some
other combinators (working solely on and with functions) from the

Deadline for discussion: 2006-11-09.

Trac ticket number: 979.


More information about the Libraries mailing list