On May 29, 2006, at 9:33 AM, Dominic Steinitz wrote:

Hi Dominic -
I hope it's ok for me to ask this question and I'm absolutely burning with curiosity to find out the answer...
How did you know to write ((.).(.)) instead of (\f g a b -> f (g a b)) ?

Brian,

I can't remember. I certainly don't find it intuitive. I think it was discussed on the Haskell mailing list a long time ago.

It may have been this thread, where Tom Pledger points out that ($) makes a good "0-ary" case of the progression:

<http://www.haskell.org/pipermail/haskell/2003-July/012259.html>

But then it's only 3 years old, so clearly not a "long time ago" :) .

-- Fritz

PS: In my original posting on that thread, I said that abstracting this out as a fold of compositions over lists of compositions (foldr (.) id (replicate n (.)) was quite difficult for typing reasons. I now realize that Oleg probably does that sort of thing idly doodling on the back of a napkin while he chats on the phone with his other hand. My mistake. :)

----------

>From the thread (quoting Tom Pledger quoting me):

Tom Pledger wrote:

K. Fritz Ruehr writes:
:
| But Jerzy Karczmarczuk enlightened me as to the full generality possible
| along these lines (revealing the whole truth under the influence of at
| least one beer, as I recall). Namely, one can define a sequence of
| functions (let's use a better notation now, with "c" for composition):
|
| c1 = (.) -- good old composition
|
| c2 = (.) . (.) -- my (.<) from above
|
| c3 = (.) . (.) . (.)
|
| c4 = (.) . (.) . (.) . (.)
|
| -- etc.

Nice!

There's also

c0 = ($)

which is clearer if you use 'non-pointfree' notation

...
c2 f g x y = f (g x y)
c1 f g x = f (g x)
c0 f g = f g

- Tom

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to