【问题标题】:Can I use shapeless to return the same arity of HList as passed HList?我可以使用 shapeless 返回与传递的 HList 相同的 HList 数量吗?
【发布时间】:2016-01-17 01:50:56
【问题描述】:
这是一个例子。我正在尝试包装一些接受并返回与List 相同的数量的外部api:
def externApi(args: List[Int]): List[String] = args.map(_.toString)
我认为这是学习无形的一个很好的借口,因为这似乎是 HList 能够做到的事情。
def foo(args: HList): HList = ???
我如何编码通过HList 和返回HList 的类型是相同的?
【问题讨论】:
标签:
scala
shapeless
hlist
【解决方案1】:
要扩展@stew 的评论,您可以使用Sized 来强制列表之间的数量相等。
import shapeless._
import syntax.sized._
def externApi[N <: Nat](args: Sized[List[Int], N]): Sized[List[String], N] =
args.map(_.toString)
用法:
scala> externApi(Sized[List](1, 2, 3, 4))
res0: shapeless.Sized[List[String],shapeless.nat._4] = List(1, 2, 3, 4)
scala> res0 foreach println
1
2
3
4
我远不是一个无形的专家,所以我不知道是否有办法通过HList 做到这一点,但看起来你的收藏无论如何都是同质的。