这是一个例子。我试图包装一些接受并返回List
的同一个外部的外部api:
def externApi(args: List[Int]): List[String] = args.map(_.toString)
我认为这是学习无形的好借口,因为它似乎是HList
能够做到的事情。
def foo(args: HList): HList = ???
如何对通过HList
且返回HList
的类型进行编码是否属于同一类型?
答案 0 :(得分: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
做到这一点,但看起来你的收藏品仍然是同质的。