How do I derive the type for this function: : <p>I'm trying to get better at playing "type tetris". I have the functions:</p>

<pre><code>(=&lt;&lt;) :: Monad m =&gt; (a -&gt; m b) -&gt; m a -&gt; m b
zip :: [a] -&gt; [b] -&gt; [(a, b)]
</code></pre>

<p>And GHCi tells me:</p>

<pre><code>(zip =&lt;&lt;) :: ([b] -&gt; [a]) -&gt; [b] -&gt; [(a, b)]
</code></pre>

<p>I'm having a hard time figuring out how to arrive at that final signature from the first two. My intuition (for lack of a better word) is saying that the first argument of <code>=&lt;&lt;</code> namely <code>a -&gt; mb</code> is somehow reconciled against the signature of <code>zip</code>, and then it should all fall out from that. But I can't understand how to make that leap. Can it be broken down in to a series of easy to follow steps?</p>
