title: Explanation of currying for zipWith ($)
body: <p>I have been trying to understand this piece of code but I'm not able to wrap it up clearly:</p>
  
  <pre><code>ghci &gt; :t zipWith
  zipWith :: (a -&gt; b -&gt; c) -&gt; [a] -&gt; [b] -&gt; [c]
  ghci &gt; :t ($)
  ($) :: (a -&gt; b) -&gt; a -&gt; b
  ghci &gt; let c = zipWith ($)
  ghci &gt; :t c
  c :: [b -&gt; c] -&gt; [b] -&gt; [c]
  </code></pre>
  
  <p>How does <code>[b -&gt; c]</code> originate up in the above type signature ?</p>