
On Sat, Feb 04, 2006 at 07:02:52PM -0500, ajb@spamcop.net wrote:
G'day all.
Hello!
Quoting Tomasz Zielonka
: Probably it was anticipated that right associative version will be more useful. You can use it to create a chain of transformations, similar to a chain of composed functions:
(f . g . h) x = f $ g $ h $ x
Of course, if $ were left-associative, it would be no less useful here, because you could express this chain thusly:
f . g . h $ x
OK, I can be persuaded to use this style. I like function composition much more than $ :-)
This is the way that I normally express it. Partly because I find function application FAR more natural than right-associative application, and partly because I'm hedging my bets for Haskell 2 just in case the standards committee wakes up and notices that the associativity of $ is just plain wrong and decides to fix it. :-)
Is there any chance that Haskell' will change the definition of $ ? Well, if there is any moment where we can afford introducing backward incompatible changes to Haskell', I think it's now or never!
In fact, I'll go out on a limb and claim that ALL such uses of $ are better expressed with composition. Anyone care to come up with a counter-example?
The only problem I see right now is related to change locality. If I have a chain like this: f x y . g x $ z and I want to add some transformation between g and z I have to change one line and insert another f x y . g x . h x y $ z With right-associative $ it would be only one line-add. Probably not a very strong argument.
But of course, left associative version can also be useful. Some time ago I used a left associative version of the strict application operator, which I named (!$).
In fact, I think it's much MORE useful, and for precisely the reason that you state: it makes strict application much more natural.
Agreed. Best regards Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland