title: How to use .collect() on each iterator returned by .unzip()?
body: <p>I have the following code, in which <code>fac</code> return <code>(MyType, OtherType)</code>:</p>
  
  <pre><code>let l = (-1..13).map(|x| {
      fac(x).0
  }).collect::&lt;Vec&lt;MyType&gt;&gt;();
  </code></pre>
  
  <p>It works, but I'm throwing away the <code>OtherType</code> values. So I decided to use <code>.unzip</code>, like this:</p>
  
  <pre><code>let (v, r) = (-1..13).map(|x| {
      fac(x)
  }).unzip();
  let l = v.collect::&lt;Vec&lt;MyType&gt;&gt;();
  let q = r.collect::&lt;Vec&lt;OtherType&gt;&gt;();
  </code></pre>
  
  <p>But type inference fails with:</p>
  
  <pre><code>error: the type of this value must be known in this context
  let l = v.collect::&lt;Vec&lt;Literal&gt;&gt;();
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  let q = r.collect::&lt;Vec&lt;OtherType&gt;&gt;();
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  </code></pre>
  
  <p>The thing is: I don't know or care what is the concrete type of the iterators (and I would suppose the compiler could infer them, as shown in the first snippet). How to satisfy the compiler in this case?</p>
  
  <p>Also, I would prefer to restructure the code - I don't like to separately call <code>.collect()</code> on both <code>v</code> and <code>r</code>. Ideally I would continue the method chain after <code>.unzip()</code>, returning two <code>Vec</code>s in that expression.</p>