Могу ли я получить список времени компиляции всех объектов case, которые получены из запечатанного родителя в Scala?

Как уже много раз обсуждалось на SO, совпадение Scala предупредит вас, если вы не исчерпываете список всех типов, происходящих из запечатанного класса.

То, что я хочу, это сгенерированный во время компиляции Iterable объектов case, производных от конкретного родителя. В качестве альтернативы, я был бы счастлив, если бы компилятор сказал мне, что у меня нет всех необходимых типов в некотором Iterable. Я не хочу подход, основанный на рефлексии, во время выполнения.

В качестве примера второго подхода я хотел бы, чтобы следующий грубый код генерировал ошибку компиляции, где это указано.

sealed trait Parent
case object A extends Parent
case object B extends Parent
case object C extends Parent

// I want a compiler error here because C is not included in the Seq()
val m = Seq(A, B).map(somethingUseful)

Не стесняйтесь ответить, сказав, что это невозможно. Просто кажется, что это должно быть возможно на некотором уровне, потому что компилятор должен выполнять по существу ту же самую работу, когда определение соответствия не является исчерпывающим.

Думая об этом по-другому, я бы взял что-то вроде метода Enumeration.values (), за исключением применения к объектам case. Конечно, я мог бы добавить что-то похожее на приведенный выше код с поддерживаемым вручную списком значений к родительскому объекту-компаньону, но это кажется излишне подверженным ошибкам, когда компилятор может сделать это для меня.

// Manually maintained list of values
object Parent { 
    val values = Seq(A, B, C)
}

Ответы на вопрос(2)

Ваш ответ на вопрос