Extractor for type application T[U_1, ..., U_n].
Extractor for type application T[U_1, ..., U_n]. This is the refined type
T { type p_1 v_1= U_1; ...; type p_n v_n= U_n }
where v_i, p_i are the variances and names of the type parameters of T,
If T
's class symbol is a lambda trait, follow the refined type with a
projection
T { ... } # $Apply
Extractor for
Extractor for
[v1 X1: B1, ..., vn Xn: Bn] -> C[X1, ..., Xn]
where v1, ..., vn and B1, ..., Bn are the variances and bounds of the type parameters of the class C.
Extractor for
Extractor for
[v1 X1: B1, ..., vn Xn: Bn] -> T
The references <rt>.this.$hk0, ..., <rt>.this.$hk<n-1>
.
If tp
is a TypeBounds instance return its upper bound else return tp
If tp
is a TypeBounds instance return its lower bound else return tp
Adapt all arguments to possible higher-kinded type parameters using etaExpandIfHK
Merge tp1
and tp2
under a common lambda, combining them with op
.
Merge tp1
and tp2
under a common lambda, combining them with op
.
The type parameters of tp1
The type parameters of tp2
Assert type is not a TypeBounds instance and return it unchanged
Does the variance of sym1
conform to the variance of sym2
?
This is the case if the variances are the same or sym
is nonvariant.