You need to explicitly declare the type, at least for the latter
trait B extends A { val y = implicitly[Int] } trait A { implicit val x : Int = 1 }
Implicit visibility rules differ, whether explicitly declared or not. If this is not the case, implicit is available (as implicit) only after the declaration point.
The reason is that type inference can become too complicated if the type has not been declared (as in a recursive routine). In many cases, the conclusion would be simple (as in your code), but the specification should be clear.
source share