我想寫會追加一個HList
一個功能,我發現Updater
是最接近我想要的東西:無形HList附加器
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
目前都編譯。無論如何,我可以用無形表達這個約束嗎?我想也許有可能要求證據表明Out
類型是一種比類型更長的元素?
@jamborta'L LacksKey K'檢查列表'L'是否不包含任何帶有鍵「K」的元素(檢查以確保''FieldType [K,_] L')。這限制了'Updater'只能追加到列表中,因爲如果密鑰已經存在,它只能修改列表 – HTNW