<br><br><div class="gmail_quote">On Sun, Apr 18, 2010 at 10:25 AM, Sean Leather <span dir="ltr">&lt;<a href="mailto:leather@cs.uu.nl">leather@cs.uu.nl</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="gmail_quote"><div class="im"><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr"><div><font face="arial, sans-serif"><span style="border-collapse: collapse;">This is the annoying part about Haskell . I can not understand composition .</span></font></div>


</div></blockquote></div><div><br>One of the ways of understanding composition (and many other functions in Haskell) is by trying to understand its type. Here it is shown by looking at the type in the interpreter GHCi.<br>
<br>
*Main&gt; :t (.)<br>
(.) :: (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c<br><br>It&#39;s a function that takes three arguments, the first two of which are functions, and the third is something else.</div></div></blockquote><div><br>As you mention below the function arrow (-&gt;), is right associative.  For this reason I like to think of the above function as binary, instead of a function of 3 arguments.  Making the associativity explicit we can rewrite it:<br>
(.) :: (b -&gt; c) -&gt; (a -&gt; b) -&gt; (a -&gt; c)<br><br>Now we can see that it is a binary function on functions.  You&#39;re mileage may vary, but I find this form more intuitive.<br><br>Jason<br></div></div>