2

这是一个例子。我正在尝试包装一些接受并返回相同数量的外部 api List

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

我认为这是学习无形的一个很好的借口,因为它似乎HList可以做到。

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

如何编码传递HList和返回HList的类型相同?

4

1 回答 1

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

我远不是一个无形的专家,所以我不知道是否有办法用 a 做到这一点HList,但无论如何你的收藏似乎都是同质的。

于 2016-01-16T17:50:56.050 回答