SportsCar - это не CarLike[String, SportsCar]
, это CarLike[String, SimpleCar[String]]
. Обратите внимание, что SportsCar extends SimpleCar[String]
, но это не помогает, поскольку CarLike
не является ковариантным в C
.
Вы не можете сделать ковариантным CarLike
в C
, так как его метод crash
принимает C
. Вместо этого вы можете передать SimpleCar[String]
в Crasher
(в конце концов, спортивные машины могут разбиться на других машинах, верно?):
val crasher = Crasher[String, SimpleCar[String]](
s => s.tail,
c => c.parts.filter(p => p.length > 0)
)
Или вы можете изменить Crasher
, чтобы получить другой параметр типа :
case class Crasher[T, C <: CarLike[T, C], X <: C](partsDamager: T => T,
carChecker: X => Seq[T]) {
// ...
}
val crasher = Crasher[String, SimpleCar[String], SportsCar](
s => s.tail,
c => c.parts.filter(p => p.length > 0)
)
GNAT доступен для скачивания здесь: https://libre.adacore.com /
Ищут "GNAT Выпуск GPL". Не уверенный, почему это так хорошо скрыто на том небольшом известном сайте.
Вот большой список , компиляторы Ada от Открывают Directory.
GNU компилятор Ada , кажется, более популярный.
GNAT, GNU реализация Ada: http://www.gnu.org/software/gnat/gnat.html