Constructing level-level functions with implicit witnesses

I am experimenting with some fairly complex level calculations. There I have a type of tag (for example, A, Band C), and functions that operate on them, which are represented by implicit witness to the path-dependent types of results:

class A
class B
class C

trait F1[T] { type result }
trait F2[T] { type result }

implicit object f1OfA extends F1[A] { type result = B }
implicit object f2OfB extends F2[B] { type result = C }

trait Composed[T] { type result }

During the calculations, when the "implementation" Composed, I need to use the fact that, given the above code, I can basically convert Ato C(in this example, I just need composition, but actually there are more things).

However, I do not know how to express the composition, since I am always limited by the restriction, which implies that they are not applied transitively; The following code is not with "implicit not found":

implicit def composed1[X](implicit f2DotF1OfX: F2[F1[X]]): Composed[X] =  
  new Composed[X] { type result = f2DotF1OfX.result }

implicitly[Composed[C]]

:

implicit def composed2[X](implicit f1OfX: F1[X], f2OfLast: F2[f1OfX.result]): Composed[X] =
  new Composed[X] { type result = f2OfLast.result }

, , , f1OfLast , . ,

implicit def composed3a[X](f1OfX: F1[X])(f2OfLast: F2[f1OfX.result]): Composed[X] =
   new Composed[X] { type result = f2OfLast.result }

, , .


: F2[F1[X]] ? , .

+4
1

, f1OfX.result:

implicit def composed4[X, Y](implicit f1OfX: F1[X] { type result = Y },
  f2OfLast: F2[Y]): Composed[X] =
    new Composed[X] { type result = f2OfLast.result }
+5