title: Shouldn't ILookup<TKey, TElement> be (declared) covariant in TElement?
body: <p>The definition <code>System.Linq.ILookUp&lt;TKey, TElement&gt;</code> reads</p>
  <pre class="lang-cs prettyprint-override"><code>interface ILookup&lt;TKey, TElement&gt; : IEnumerable&lt;IGrouping&lt;TKey, TElement&gt;&gt;, IEnumerable 
  {
      int Count { get; }
  
      IEnumerable&lt;TElement&gt; this[TKey key] { get; }
  
      bool Contains(TKey key);
  }
  </code></pre>
  <p>Since <code>IEnumerable</code> is covariant in <code>IGrouping&lt;TKey, TElement&gt;</code> , <code>IGrouping&lt;TKey, TElement&gt;</code> is covariant in <code>TElement</code> and the interface only exposes <code>TElement</code> as a return type, I would assume that <code>ILookup</code> is also covariant in <code>TElement</code>. Indeed, the definition</p>
  <pre class="lang-cs prettyprint-override"><code>interface IMyLookup&lt;TKey, out TElement&gt; : IEnumerable&lt;IGrouping&lt;TKey, TElement&gt;&gt;, IEnumerable 
  {
      int Count { get; }
  
      IEnumerable&lt;TElement&gt; this[TKey key] { get; }
  
      bool Contains(TKey key);
  }
  </code></pre>
  <p>compiles without problems.</p>
  <p>So, what might be the reason why the <strong>out</strong> keyword is missing in the original definition? Might it be added future versions of Linq?</p>