closes #4044. kind checking ignored trailing higher-order arguments. no review
git-svn-id: http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk@23900 5e8d7ff9-d8ef-0310-90f0-a4852d11357a
This commit is contained in:
parent
fb5299a2b6
commit
37276f74b7
|
@ -5486,7 +5486,7 @@ A type's typeSymbol should never be inspected directly.
|
|||
def stricterBounds(as: Iterable[(Symbol, Symbol)]) { if(explainErrors) _stricterBounds ++= as }
|
||||
|
||||
for ((hkarg, hkparam) <- hkargs zip hkparams) {
|
||||
if (hkparam.typeParams.isEmpty) { // base-case: kind *
|
||||
if (hkparam.typeParams.isEmpty && hkarg.typeParams.isEmpty) { // base-case: kind *
|
||||
if (!variancesMatch(hkarg, hkparam))
|
||||
varianceMismatch(hkarg, hkparam)
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
t4044.scala:9: error: AnyRef takes no type parameters, expected: one
|
||||
M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
|
||||
^
|
||||
t4044.scala:9: error: kinds of the type arguments (<error>) do not conform to the expected kinds of the type parameters (type N).
|
||||
<error>'s type parameters do not match type N's expected parameters: <none> has no type parameters, but type N has one
|
||||
M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
|
||||
^
|
||||
t4044.scala:11: error: kinds of the type arguments (Test.A) do not conform to the expected kinds of the type parameters (type N).
|
||||
Test.A's type parameters do not match type N's expected parameters: type _ has no type parameters, but type O has one
|
||||
M[A] // error, (A :: (* -> *) not kind-conformant to (N :: * -> * -> *)
|
||||
^
|
||||
t4044.scala:15: error: kinds of the type arguments (Test.C) do not conform to the expected kinds of the type parameters (type N).
|
||||
Test.C's type parameters do not match type N's expected parameters: type _ has one type parameter, but type _ has none
|
||||
M[C] // error, (C :: (* -> * -> * -> *) not kind-conformant to (N :: * -> * -> *)
|
||||
^
|
||||
four errors found
|
|
@ -0,0 +1,16 @@
|
|||
object Test {
|
||||
def M[N[O[_]]] = ()
|
||||
type A[_] = Any
|
||||
type B[_[_]] = Any
|
||||
type C[_[_[_]]] = Any
|
||||
|
||||
M[Any] // okay, Any is kind overloaded.
|
||||
|
||||
M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
|
||||
|
||||
M[A] // error, (A :: (* -> *) not kind-conformant to (N :: * -> * -> *)
|
||||
|
||||
M[B] // okay, (B :: (* -> * -> *) is kind-conformant to (N :: * -> * -> *)
|
||||
|
||||
M[C] // error, (C :: (* -> * -> * -> *) not kind-conformant to (N :: * -> * -> *)
|
||||
}
|
Loading…
Reference in New Issue