title: Composing function composition: How does (.).(.) work?
body: <p><code>(.)</code> takes two functions that take <strong>one</strong> value and return a value:</p>
  
  <pre><code>(.) :: (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
  </code></pre>
  
  <p>Since <code>(.)</code> takes <strong>two</strong> arguments, I feel like <code>(.).(.)</code> should be invalid, but it's perfectly fine:</p>
  
  <pre><code>(.).(.) :: (b -&gt; c) -&gt; (a -&gt; a1 -&gt; b) -&gt; a -&gt; a1 -&gt; c
  </code></pre>
  
  <p>What is going on here? I realize this question is badly worded...all functions really just take one argument thanks to currying. Maybe a better way to say it is that the types don't match up.</p>