title: Path-dependent argument type is not enforced (?)
body: <pre><code>class Outter {
    type Inner = Either[Int, String]
  
    def f(x: this.Inner) = 1
  }
  
  val o = new Outter
  val someLeft = Left(1)
  o.f(someLeft)
  </code></pre>
  
  <p>tried at the REPL:</p>
  
  <pre><code>scala&gt; :load Learn.scala
  Loading Learn.scala...
  defined class Outter
  o: Outter = Outter@28037ced
  someLeft: scala.util.Left[Int,Nothing] = Left(1)
  res0: Int = 1
  </code></pre>
  
  <p>Which confuses the hell out of me as <code>Outter.f()</code> has an explicit path-dependent type argument (<code>x: this.Inner</code>) which means <em>only</em> those <code>Left</code>s (or <code>Right</code>s) that are (a sub-type of) <code>o.Inner</code> are allowed and <em>not</em> just any <code>Left[Int,_]</code> or <code>Right[Int,_]</code>. I expect to see a type mismatch error along the lines : </p>
  
  <p>Required <code>o.Inner</code>, Found <code>Left[Int,Nothing]</code>.</p>
  
  <p>But it just compiles fine! What am I (badly) missing here ?</p>