1
Shapeless HListのラッパーを構築していますが、updatedAt
関数を使用してHListの値を更新したいと思いますが、暗黙のうちに正しい値を取得できないようです。クラス内でReplaceAtを使用する
class Data[L <: HList](val hl: L) {
def updatedAtV1[V](n : Nat, value : V)(implicit
replacer : ReplaceAt[L, n.N, V]) : replacer.Out = replacer(hl, value)
def updatedAtV2[V, Out <: HList](n : Nat, value : V)(implicit
replacer : ReplaceAt.Aux[L, n.N, V, (V, Out)]) : Out = replacer(hl, value)._2
}
V1
コンパイルが、それはTuple
を返すので、私は、私はreplacer(hl, value)._2
要素を取得することはできませんのでTuple
型にそれを強制することができません:これらは私が考える2つのバージョンが作業溶液に最も近いです。 V2
では、コンパイラはOut
型を解決できません。
V2
は、値が同じタイプのタイプであればOKですが、タイプが異なる場合は失敗します。
あなたは余分なタイプのパラメータを導入することにより、それを修正することができますありがとうございました。私は完全にそのビットを逃した。 – jamborta