Предполагаемый тип функции, которая архивирует 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)
Но я'Я получаю путаницу по вышеупомянутой проблеме, пытаясь включить это в функцию.
Спасибо! Я