将多个元素添加到无形HList

时间:2017-03-22 23:54:37

标签: scala shapeless

如何将多个项目添加到HList

我的天真版本无法编译:

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

对于普通的List,这种方法很有效。但是,对于HList,我假设,需要提供一个Poly2来获取单个项目和一个HList并返回附加列表。

当然,如果有更好的方法来添加多个项目,那么这些方法将非常受欢迎。

1 个答案:

答案 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