这是一个例子。我正在尝试包装一些接受并返回相同数量的外部 api List
:
def externApi(args: List[Int]): List[String] = args.map(_.toString)
我认为这是学习无形的一个很好的借口,因为它似乎HList
可以做到。
def foo(args: HList): HList = ???
如何编码传递HList
和返回HList
的类型相同?
要扩展@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
我远不是一个无形的专家,所以我不知道是否有办法用 a 做到这一点HList
,但无论如何你的收藏似乎都是同质的。