title: How to specify associated type <Item=...> when calling associated function of a trait?
body: <p>I have this rust code <a href="https://play.rust-lang.org/?version=stable&amp;mode=debug&amp;edition=2021&amp;code=use%20itertools%3A%3A%7Brepeat_n%2CRepeatN%7D%3B%0A%0Apub%20trait%20MyIterator%3A%20Iterator%20%7B%0A%20%20%20%20fn%20fill1(elem%3A%20Self%3A%3AItem%2C%20n1%3A%20usize)%20-%3E%20RepeatN%3CSelf%3A%3AItem%3E%0A%20%20%20%20where%0A%20%20%20%20%20%20%20%20Self%3A%3AItem%3A%20Clone%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20repeat_n(elem%2C%20n1)%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20error%5BE0284%5D%3A%20type%20annotations%20needed%0A%20%20%20%20%2F%2F%20let%20r%3A%20RepeatN%3Cchar%3E%20%3D%20MyIterator%3A%3Afill1(%27a%27%2C%205)%3B%0A%20%20%20%20%2F%2F%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%20cannot%20infer%20type%0A%20%20%20%20%2F%2F%20note%3A%20cannot%20satisfy%20%60%3C_%20as%20Iterator%3E%3A%3AItem%20%3D%3D%20_%60%0A%20%20%20%20let%20r%3A%20RepeatN%3Cchar%3E%20%3D%20MyIterator%3A%3Afill1(%27a%27%2C%205)%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20error%5BE0229%5D%3A%20associated%20type%20bindings%20are%20not%20allowed%20here%0A%20%20%20%20let%20r%3A%20RepeatN%3Cchar%3E%20%3D%20MyIterator%3A%3A%3CItem%3Dchar%3E%3A%3Afill1(%27a%27%2C%205)%3B%0A%7D%0A" rel="nofollow noreferrer">playground</a>:</p>
  <pre class="lang-rust prettyprint-override"><code>use itertools::{repeat_n,RepeatN};
  
  pub trait MyIterator: Iterator {
      fn fill1(elem: Self::Item, n1: usize) -&gt; RepeatN&lt;Self::Item&gt;
      where
          Self::Item: Clone,
      {
          repeat_n(elem, n1)
      }
  }
  </code></pre>
  <p>My Problem is that I can't call this method because rustc can't infer the type.</p>
  <pre class="lang-rust prettyprint-override"><code>// error[E0284]: type annotations needed
  // let r: RepeatN&lt;char&gt; = MyIterator::fill1('a', 5);
  //                        ^^^^^^^^^^^^^^^^^ cannot infer type
  // note: cannot satisfy `&lt;_ as Iterator&gt;::Item == _`
  let r: RepeatN&lt;char&gt; = MyIterator::fill1('a', 5);
  </code></pre>
  <p>I tried this but it doesn't compile:</p>
  <pre><code>// error[E0229]: associated type bindings are not allowed here
  let r: RepeatN&lt;char&gt; = MyIterator::&lt;Item=char&gt;::fill1('a', 5);
  </code></pre>
  <p>How can I specify the type of <code>Item</code> in this call? Or is a function outside of the trait (like <code>itertools::repeat_n</code>) the best way here?</p>