Je crée un wrapper pour Shaleless HList et j'aimerais utiliser la fonction updatedAt
pour mettre à jour une valeur dans le HList, mais je n'arrive pas à obtenir les implicits correctement. Ce sont les deux versions que je pense sont les plus proches d'une solution de travail:use ReplaceAt dans une classe
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
compiles, mais parce qu'il renvoie une Tuple
je suis incapable de le forcer à un type Tuple
donc je ne peux pas l'élément replacer(hl, value)._2
. Dans V2
le compilateur ne peut pas résoudre le type Out
.
Notez que V2
fonctionne correctement, si la valeur est le même type du type qu'il remplace, mais échoue si c'est un type différent.
Je vous remercie. J'ai complètement raté ce petit bout. – jamborta