Этот код компилируется так же хорошо:
type Named[A] = (String, A)
def foo[A](a: A) = {}
trait Elem[A]
val m = Map[String, Elem[_]]()
m.foreach(e => foo[Named[Elem[_]]](e))
Однако это не так:
type NamedElem[A] = Named[Elem[A]]
m.foreach(e => foo[NamedElem[_]](e))
Сообщение об ошибке на самом деле не объясняет мне, почему:
type mismatch;
found : (String, Elem[_])
required: NamedElem[_]
(which expands to) (String, Elem[_$2]) forSome { type _$2 }
Map[String, Elem[_]]().foreach(e => foo[NamedElem[_]](e))
^
Так что, видимо, NamedElem[A]
не Named[Elem[A]]
. Это предполагаемое поведение? Или я что-то упускаю?
Благодарю вас!