Похоже, что вы действительно хотите не столько параметризовать тип по значению (как вы могли бы в C ++), но заставить различных разработчиков договориться о единой реализации.
Я не думаю, что это проблема, которую язык решит для вас. Даже если вы заставляете использовать только один способ иметь тип <td>
, разве нет никакого усмотрения в том, что именно является типом <td>
?
Если вы действительно хотите параметризовать тип по значению, вам, вероятно, придется сделать что-то вроде:
object TD {
}
т.е. сделайте его действительно типом, теперь вы можете написать Element[TD]
. Хотя проблема в том, что кто-то еще может написать object TD { }
в другом пакете, и их будет два.
Вы можете попытаться эмулировать полностью зависимые типы, используя что-то вроде
object A { }
object B { }
object C { }
...
object TyString[Car,Cdr] { }
Так что «TD» будет представлен как
TyString[T,TyString[D,()]]
Но вы, вероятно, не хотите туда идти;)
(Я слышал, что Scala собирался реализовать нечто, называемое «синглтон-литералы», но случалось ли это когда-нибудь? Вы должны были писать "td".type
, но Scala 2.9.1 не принимает этот синтаксис ).