У меня проблемы со скалаком, так как я не могу найти манифест для внутреннего типа с более высоким родом, который я хочу использовать.Рассмотрим некоторый список типа типа с конструктором:
trait L[S, A]
def emptyList[S, A: Manifest]: L[S, A] = ???
Теперь другой тип, который создается из его сопутствующего объекта, подобного этому:
object Tree {
private class Leaf[S, A]
private class Impl[S, A](l: L[S, Leaf[S, A]]) extends Tree[S, A]
def empty[S, A]: Tree[S, A] = new Impl(emptyList[S, Leaf[S, A]])
}
trait Tree[S, A]
Сбой, потому что scalac хочет манифест для типа Leaf[S, A]
.Почему это не доступно?Я не хочу ослаблять видимость Leaf
и загромождать конструктор, прося передать явный аргумент.
Я вообще не понимаю этого - я думал, что с точки зрения JVM массивыкоторые построены в L
сводятся к Array[Leaf[_, _]]
он же Array[java.lang.Object]
, так какой смысл в этом отказе?
Есть ли способы найти манифест?