【发布时间】:2017-09-30 18:37:20
【问题描述】:
我正在尝试编写一个附加HList 的函数,我发现Updater 最接近我想要的:
def appender[L <: HList, V, Out <: HList](hl: L, k: Witness, v: V)(implicit updater: Updater.Aux[L, FieldType[k.T, V], Out]) : Out = {
updater(hl, field[k.T](v))
}
我有这个更新和追加 HList 的函数,但我想禁用更新,只允许追加函数,这样:
val hl = 'field1 ->> 1 :: HNil
appender(hl, 'field2, 2) //should compile
appender(hl, 'field1, 2) //should fail
目前两者都可以编译。无论如何,我可以用 Shapeless 来表达这个约束吗?我想也许可以提出证据证明Out 类型比 in 类型长一个元素?
【问题讨论】: