
On Monday 02 August 2010 12:30:01 pm Stephen Tetley wrote:
For sure, we don't conceptualize them as 3 parameter functions because they're more general. But Maciej Piechotka's (<.>) is just a function so not its as general as the arrow operators.
So what? 99% of the uses I've ever seen of (&&&), (|||), etc. are with the Arrow instance for (->). I'd, at least, consider them worth adding even specialized to that instance if they didn't already exist in their more general forms. And I'd still think of the specialized versions as binary, because using combinators that accept and return functions is one of the perks of using a functional language.
My point was that in Prelude + subset of Base, infix symbol names are used for binary functions, not arbitrary combinators like `on` (vis the three exceptions listed). Whether this is a worthwhile principle or even whether its just an accident and not a principle is open to debate. My opinion is that its worth airing it now, as granting a place in Base for (<.>) would feel like a precedent.
on is named on because uses like compare `on` fst read nicely, and are suggestive of their meaning. And then there are div, elem, max, etc. which are frequently used infix, but are alphabetic binary functions. I'm not sure how enthusiastic I am about (<.>). But this rule about naming (which as far as I know, has not informed any previous decisions; (<=<) and (>=>) are not very old; they were added in GHC 6.8/base 3) is not a good argument against it. -- Dan