Я ищу способ объединить два HList. Первый генерируется из case-класса, преобразованного в его универсальное представление, а второй определяется вручную как HList Nat.
В результате я ожидаю кортеж (или HList с двумя членами) с одним полем из класса case и связанным с ним Nat.
Цель состоит в том, чтобы создать «настраиваемый» 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].