title: Use of abstract type in a concrete class?
body: <pre><code>scala&gt; class A { type T &lt;: String; def f(a: T) = println("foo")}
  defined class A
  
  scala&gt; (new A).f("bar")
  &lt;console&gt;:9: error: type mismatch;
  found   : java.lang.String("bar")
  required: _1.T where val _1: A
               (new A).f("bar")
                         ^
  </code></pre>
  
  <p>Class <code>A</code> has an abstract type <code>T</code>, but is not an abstract class. Creating an object of <code>A</code> (as shown) does not define type <code>T</code>. </p>
  
  <p>My first thought was, I am allowed to pass any type as <code>T</code> which is a subclass of String, but I am not. So what type actually is <code>T</code> in the object and what am I allowed to pass through ?</p>