title: understanding the type signature of (.)
body: <p>I'm just learning Haskell and functional programming using Richard Bird's book and came across the type signature of the (.) function. Namely</p>
  
  <pre><code>(.) :: (b -&gt; c) -&gt; (a -&gt; b) -&gt; (a -&gt; c)
  </code></pre>
  
  <p>and the associated definition</p>
  
  <pre><code>(f . g) x = f (g x)
  </code></pre>
  
  <p>I understand what the operator is doing but am a bit confused about how to read the type signature. Is it saying that (.) takes as its first argument a function of type (b -> c), then returns a function of type (a -> b), and finally returns a function of type (a -> c)? Is this the right way to read the type signature?</p>
  
  <p>Also, could this be an example of currying, where (.) is a curried function that takes two parameters? Or is that not the correct way to think about currying?</p>