3
私は2つのHListを一緒に圧縮する方法を探しています。最初のものは、その汎用表現で変換されたケース・クラスから生成され、2番目はNatのHListとして手動で定義されます。Zip generic HList with static Nat HList
その結果、ケースクラスの1つのフィールドとNatが関連付けられたタプル(または2つのメンバHList)が必要です。
目的は、カスタマイズ可能な「ZipWithIndex
」を作成することです。
def derive[A, I <: HList, R <: HList, Z <: HList](implicit
gen: Generic.Aux[A, R],
zipper: Zip.Aux[R, I, Z],
enc: Lazy[Encoder[Z]])(a: A): Deriver[A] = {
val genRepr = gen.to(A)
val zipped = zip(genRepr :: ??? :: HNil)
enc.value(zipped)
}
case class Foo(a: String, b: String, c: String)
derive[Foo, Nat._1 :: Nat._3 :: Nat.7 :: HNil]
結果はencoderTuple[H, N <: Nat, T <: HList]: Encoder[(H, N) :: T]
かとencoderHList[H, N <: Nat, T <: HList]: Encoder[(H::N::HNil) :: T]
と一致する必要があります。
親愛なる@JulienLafontあなたは瞬間を持っているかどうかをチェックすることができますによってあなたの質問をするので、それがしばらくしています私の[answer](https://stackoverflow.com/a/45914883/5249621)がOKならば?ありがとうございました。 –