【发布时间】:2020-04-17 17:26:51
【问题描述】:
如何在保持 KList 的原始类型的同时将元素附加到 KList?我对 shapeless 还很陌生,我真的不清楚函数可以期待什么类型。
下面是我正在尝试做的一个例子。我想使用类型约束来确保所有值都符合Box[_],但我也尝试了一个使用普通HList 的不受约束的示例,但仍然无法编译。
import shapeless._
import shapeless.UnaryTCConstraint.*->*
case class Box[T](value: T)
case class BoxBuilder[B <: HList](boxes: B) {
def add[T](box: Box[T]): BoxBuilder[HList] = {
this.copy(boxes = boxes :+ box)
}
}
case class BoxBuilderTC[B <: HList : *->*[Box]#λ](boxes: B) {
def add[T](box: Box[T]): BoxBuilder[HList] = {
this.copy(boxes = boxes :+ box)
}
}
我可能在这里遗漏了一些关于 shapeless 的基础知识,因此欢迎提供任何其他提示/建议。
【问题讨论】:
标签: scala generics types functional-programming shapeless