Skip to content

Adding on

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

Deadline for discussion: 2006-11-09.

Trac metadata
Trac field Value
Version 6.6
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown
Architecture Unknown
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information