向无形 HList 添加多个元素

Add multiple elements to shapeless HList

如何向 HList 添加多个项目?

我的原始版本无法编译:

(1 to 100).foldLeft(HNil)((l,i) => i :: l)

对于普通的 Lists 这种方法会很有效。然而,对于 HList,我假设需要提供一个 Poly2,它包含一个项目和一个 HList 以及 returns 附加列表。

当然,如果有任何更好的方法来添加多个项目,这些方法将不胜感激。

这可能是一个 XY problem。但是您在这里尝试做的事情可以通过 Sized 集合来完成。

scala> import shapeless._, syntax.sized._
import shapeless._
import syntax.sized._

scala> (1 to 10).reverse.toList.ensureSized[nat._10].toHList
res1: shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.HNil]]]]]]]]]] = 10 :: 9 :: 8 :: 7 :: 6 :: 5 :: 4 :: 3 :: 2 :: 1 :: HNil

如果您想要 100 的范围,您会遇到 nat._100 不存在的问题,因此您必须自己创建它。我会计算它:

val prod = the[ops.nat.Prod[nat._10, nat._10]]
type _100 = prod.Out
(1 to 100).reverse.toList.ensureSized[_100].toHList