3
В библиотеке есть класс с более высоким типом, с одним параметром типа. Я хочу дать ему тип, который принимает два параметра, поэтому я использую выражение type
, чтобы исправить другой параметр.Несоответствие типов при использовании более высокосортных типов
Но это не так, как я ожидаю.
Код сводится к этому:
object Main {
class Bar[T[_]] {
def bar[A]: Option[T[A]] = None
}
def foo[A] = {
type T[B] = Map[A, B]
new Bar[T]
}
val f: Option[Map[String, Int]] = foo[String].bar[Int]
}
Я получаю сообщение об ошибке при компиляции (Scala 2.11.4):
test.scala:12: error: type mismatch;
found : Option[T[Int]]
(which expands to) Option[scala.collection.immutable.Map[A,Int]]
required: Option[Map[String,Int]]
val f: Option[Map[String, Int]] = foo[String].bar[Int]
^
one error found
Почему ошибка типа?
Теперь, когда вы упомянули об этом, я видел тех, кто использовал это раньше. –