title: Has Scala a better way to express "self recursive generic types"?
body: <p>There's a common Java idiom (seen in <code>Enum</code> for example) to declare a generic type variable that has to match the actual derived type.</p>
  
  <pre><code>class Enum&lt;E extends Enum&lt;E&gt;&gt; {
  ...
  }
  </code></pre>
  
  <p>or, if needed more generic arguments:</p>
  
  <pre><code>abstract class Foo&lt;T, Actual extends Foo&lt;T, Actual&gt;&gt; {
      //now we can refer to the actual type
      abstract Actual copy();
  }
  class Concrete&lt;T&gt; extends Foo&lt;T, Concrete&lt;T&gt;&gt; {
      Concrete&lt;T&gt; copy() {...}
  }
  </code></pre>
  
  <p>Things can get very verbose really quickly, so  I imagined that Scala might have something nicer than a literal translation of the examples above.</p>
  
  <p>Are there any more elegant ways to achieve this?</p>