Всего коллекций, отклонение коллекций типов, которые не включают все возможности

Предположим, у нас есть следующие типы:

sealed trait T
case object Goat extends T
case object Monk extends T
case object Tiger extends T

Теперь, как построить коллекцию T таким образом, что по крайней мере один из каждого под- T появляется в коллекции, это ограничение применяется во время компиляции? Коллекция, в которой, вопреки этому:

val s:Seq[T] = Seq(Goat)

, который компилируется, этот:

val ts:TotalSeq[T] = TotalSeq(Goat, Goat, Tiger)

- нет. Я использовал Scala выше, но я был бы рад увидеть решения и на других языках.

(Простите меня, если мои слова немного нечеткие; я простужен и сегодня развлекаюсь головоломками.)

5
задан troutwine 2 June 2011 в 15:35
поделиться