我在使用LabelledGeneric转换为案例类时遇到问题
下面是我的代码的简化示例:
import shapeless._
import shapeless.record._
def removeKeys[
F <: Product,
T <: Product,
HF <: HList,
HT <: Product
](
from: F,
removeField: String
)(
implicit genericFrom: LabelledGeneric.Aux[F, HF],
genericTo: LabelledGeneric.Aux[T, HT]
): T = {
val hListFrom = genericFrom.to(from)
val hListTo = hListFrom - Witness(removeField) // Missing implicit Remover
genericTo.from(hListTo) // If I remove multiple fields in a say foldLeft how do I ensure the resulting HList is of type HT?
}
我显然想念一个卸妆器-考虑到我最终想要在一组标签上折叠以删除hListFrom,我应该怎么想起?
我的最终意图是从案例类T中选择存在于案例类T上的所有具有相同类型的字段。
例如,给定:
case class A(a: Int, b: Double, c: Boolean)
case class B(b: Double, c: Boolean)
我想要
def f[F <: Product, T <: Product](cc: F): T
使f(A(1, 1.0, true))
返回B(1.0, true)
我想我需要两个HList的交集,但是我刚刚想到,我可能需要根据输出用例类构造函数参数的顺序对此进行重新排序。
我很喜欢学习Shapeless,但是学习曲线相当陡峭,许多示例倾向于省略有关如何确保将隐式传递给通用代码的细节。