我可以使用无形来返回与传递HList相同的HList元素吗?

时间:2016-01-16 06:21:10

标签: scala shapeless hlist

这是一个例子。我试图包装一些接受并返回List的同一个外部的外部api:

def externApi(args: List[Int]): List[String] = args.map(_.toString)

我认为这是学习无形的好借口,因为它似乎是HList能够做到的事情。

def foo(args: HList): HList = ???

如何对通过HList且返回HList的类型进行编码是否属于同一类型?

1 个答案:

答案 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做到这一点,但看起来你的收藏品仍然是同质的。