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


<excerpt><excerpt>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)) ?

</excerpt>

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.

</excerpt>

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: 


<excerpt>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<color><param>0000,6363,1212</param>

</color></excerpt>

