を追加できるHList
の上にラッパーを作成しました。次のように定義されますHList変換アウトタイプ
class HListWrapper[L <: HList](val hl: L) {
def append[V, Out <: HList](k: Witness, v: V)(implicit updater: Updater.Aux[L, FieldType[k.T, V], Out],
lk: LacksKey[L, k.T]): HListWrapper[Out] = {
new HListWrapper(updater(hl, field[k.T](v)))
}
}
object HListWrapper {
def apply[P <: Product, L <: HList](p: P)(implicit gen: LabelledGeneric.Aux[P, L]) =
new HListWrapper(gen.to(p))
}
それはこのように使用:
case class CC(i: Int, ii: Int)
val cc = CC(100, 1000)
val hl = HListWrapper(cc)
hl.append('iii, 10000)
しかし、私はOut
の種類をキャプチャするために、別の関数内HListWrapper
を置くしようとすると、コンパイラは解決に見えることはできません変換の最終的なタイプ(型の不一致エラーで失敗):
def cctohlist[Out <: HList]: CC => HListWrapper[Out] = {
m => {
val hl = HListWrapper(m)
hl.append('iii, 10000)
}
}
cctohlist
メソッドを作成する主な理由は、Geでありますt追加後のHList
のタイプ。達成することは可能ですか?
感謝。追加した後に 'HList'の型を取得するために' cctolist'をリファクタリングする他の方法はありますか? – jamborta
@jamborta答えを更新しました。 –