私はUpdater
は私が欲しいものに最も近いことが判明し、HList
を追加します関数を記述しようとしています:型崩れ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
タイプがinタイプより1つ長いエレメントであるという証拠を尋ねることは可能でしょうか?
@ Lambsa 'L LacksKey K 'は、リスト' L'に 'K 'キーが含まれていないことをチェックします(' L)。これは、キーが既に存在する場合にのみリストを変更することができるので、 'Updater'をリストに追加することを制限します。 – HTNW