Any thoughts why approach 2 is not supported, or am I missing any syntax ?
trait Bar { }
class BarImpl extends Bar{ }
1 Scala allows to override with generic type parameter
abstract class Foo {
  type T <: Bar
  def bar1(f: T): Boolean
}
class FooImpl extends Foo {
  type T = BarImpl
  override def bar1(f: BarImpl): Boolean = true 
}
2 While it doesn't allow with generic type class
abstract class Foo2[T <: Bar] {
  def bar1(f: T): Boolean
}
class FooImpl2[BarImpl] extends Foo2 {
  // Error: Method bar1 overrides nothing
  override def bar1(f: BarImpl): Boolean = true
}
 
    