Is that also solved by this change?
Yes, because you can now write
def foo[F[_] : {Functor, Traverse, Monad}, A, B](c: F[A])(f: A => B): F[B] =
c.map(f)
and it will resolve to the Functor. Previously, adding the common superclass would have made ambiguities worse. Now, it solves the problem.