如何将多个项目添加到HList
?
我的天真版本无法编译:
(1 to 100).foldLeft(HNil)((l,i) => i :: l)
对于普通的List
,这种方法很有效。但是,对于HList
,我假设,需要提供一个Poly2
来获取单个项目和一个HList并返回附加列表。
当然,如果有更好的方法来添加多个项目,那么这些方法将非常受欢迎。
答案 0 :(得分:0)
这可能是XY problem。但是你在这里要做的就是用大小的集合来完成。
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