Предполагаемый тип функции, которая архивирует HLists

Благодаряhttps://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0 Я понимаю, как сжать бесформенные HLists:

Импортируем некоторые вещи из Shapeless 2.0.0-M1:

import shapeless._
import shapeless.ops.hlist._
import syntax.std.tuple._
import Zipper._

Создайте два HList:

scala> val h1 = 5 :: "a" :: HNil
h1: shapeless.::[Int,shapeless.::[String,shapeless.HNil]] = 5 :: a :: HNil

scala> val h2 = 6 :: "b" :: HNil
h2: shapeless.::[Int,shapeless.::[String,shapeless.HNil]] = 6 :: b :: HNil

Застегните их:

scala> (h1, h2).zip
res52: ((Int, Int), (String, String)) = ((5,6),(a,b))

Теперь попробуйте определить функцию, которая делает то же самое:

scala> def f[HL  

Есть ли способ определить f таким образом, чтобы я получил ((5,6), (a, b)) обратно в этом случае?

В конечном итоге, что яЯ пытаюсь определить функцию, которая объединяет два списка HL, а затем сопоставляет их, выбирая либо _1, либо _2 на основе броска монеты, что даст другой HL.

object mix extends Poly1 {
  implicit def caseTuple[T] = at[(T, T)](t =>
    if (util.Random.nextBoolean) t._2 else t._1)
}

Который прекрасно работает в REPL:

scala> (h1, h2).zip.map(mix)
res2: (Int, String) = (5,b)

Но я'Я получаю путаницу по вышеупомянутой проблеме, пытаясь включить это в функцию.

Спасибо! Я

Ответы на вопрос(2)

Ваш ответ на вопрос