id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
979	Adding on	nad		"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."	proposal	closed	normal		libraries/base	6.6	fixed			Unknown/Multiple	Unknown/Multiple		Unknown				
