Shapeless: ограничение типов классов case

(ПРИМЕЧАНИЕ: отдельно от Shapeless: попытка ограничить элементы HList по их типу и Shapeless: собственное ограничение HList с использованием Coproduct )

Вопрос 3. Ограничьте классы дел по типам параметров

Очень хорошим дополнительным преимуществом было бы, если бы я мог использовать ограничения HList для ограничения класса case только для построения из AnyVals, Strings и определенного MyBaseTrait, которые рекурсивно выполняют то же ограничение. Ограничение, определяемое для базовой черты, и отсутствие необходимости касаться какого-либо производного класса case было бы здорово. Что-то типа:

trait MyBaseTrait
type MyCP = Boolean :+: Long :+: ... :+: String :+: MyBaseTrait
case class ValidSimple(b: Boolean, s: String) extends MyBaseTrait
case class ValidNested(s: String, vs: ValidSimple) extends MyBaseTrait
case class NotOfBaseTrait(l: Long)

case class InvalidNested(s: String, vs: NotOfBaseTrait) extends MyBaseTrait // => compile error

Это позволит выйти из строя намного раньше. Это возможно? через Generic#Repr или DeepHList?


person sthielo    schedule 25.09.2015    source источник