This seems like a mistake. There are no restrictions on parameters like superclasses, but moreover, tracing for -explaintypes seems suspicious to me:
scala> trait >>[F1 <: TFn1[_, _], F2 <: TFn1[_, _]] extends TFn1[F1#In, F2#Out] { | type Apply[T] = F2#Apply[F1#Apply[T]] | } <console>:9: error: illegal inheritance; self-type >>[F1,F2] does not conform to TFn1[_$1,_$4] selftype TFn1[_$1,_$4] trait >>[F1 <: TFn1[_, _], F2 <: TFn1[_, _]] extends TFn1[F1#In, F2#Out] { ^ >>[F1,F2] <: TFn1[_$1,_$4]? TFn1[_$1,_$4] <: TFn1[_$1,_$4]? _$1 <: _$1? _$1 <: Nothing? <notype> <: Nothing? false Any <: Nothing? <notype> <: Nothing? false false false Any <: _$1? Any <: Nothing? <notype> <: Nothing? false false false false false false
In particular, I do not understand how and why he cannot prove that TFn1[_$1,_$4] <: TFn1[_$1,_$4] or even _$1 <: _$1 .
source share