Scala Shapeless:限制case类类型

Scala Shapeless:限制case类类型,scala,types,shapeless,case-class,restrict,Scala,Types,Shapeless,Case Class,Restrict,(注:从和中拆分) 问题3-按参数类型限制案例类 如果我可以使用HList约束来约束case类,使其只能从任意值、字符串和特定的MyBaseTrait中构建,从而递归地满足相同的约束,那么这将是一个非常好的额外收益。在基本trait上定义约束,并且不必接触任何派生的case类,这将非常好。比如: trait MyBaseTrait type MyCP = Boolean :+: Long :+: ... :+: String :+: MyBaseTrait case class ValidSim

(注:从和中拆分)

问题3-按参数类型限制案例类

如果我可以使用HList约束来约束case类,使其只能从任意值、字符串和特定的MyBaseTrait中构建,从而递归地满足相同的约束,那么这将是一个非常好的额外收益。在基本trait上定义约束,并且不必接触任何派生的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
这将允许我们更早地失败。这可能吗?通过通用#Repr或DeepHList