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 thepatch)
-
and, most importantly, it is easier at a glance to understand
(*)
onp
than to understand\x y -> p x * p y
(assuming one knows abouton
).
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 |