title: Scala Function Variance and Overriding
body: <p>I'm having a little problem understanding variance of methods when overloading.</p>
  
  <p>While this perfectly works due to covariance in the return type</p>
  
  <pre><code>class Bla 
  class Fasel extends Bla 
  
  trait Test[A] {
   def tester(): Bla = new Bla
  }
  
  class FooTest[A](a: A) extends Test[A] {
   override def tester(): Fasel = new Fasel                                      
  }
  </code></pre>
  
  <p>this one fails even though functions are contravariant in their
  parameter types.</p>
  
  <pre><code>class Bla 
  class Fasel extends Bla 
  
  trait Test[A] {
   def tester(a: Fasel): Bla = new Bla                                           
  }
  
  class FooTest[A](a: A) extends Test[A] {
   override def tester(a: Bla): Fasel = new Fasel
  }
  </code></pre>
  
  <p>What am I getting wrong here? Any pointers?</p>
  
  <p>Regards,
  raichoo</p>