无形:有没有办法从案例类或元组中获取Hlist类型

时间:2017-04-28 09:41:21

标签: scala tuples shapeless

我对无形的全新。我从列表中创建一个案例类如下:

val list = Seq(Some(1), Some(1.0), ...)
val y =
  list
    .toHList[Option[Int]::Option[Double]::Option[Int]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::HNil]

val z = y.get.tupled
val aa = YieldVariables.tupled(z)

效果很好,但我想知道是否有办法不在toHList[Here]部分写出所有这些类型。

所以我想知道list.toHList[find the type yourself]list.getTypesForHlistMyCaseClass.getTypesForHlist之类的结果是否存在Option[Int]::Option[Double]...

1 个答案:

答案 0 :(得分:3)

对于案例类(和元组,这些也是案例类!),使用Generic

case class A(i: Int, s: String)
shapeless.Generic[A].to(A(1, "")) // Int :: String :: HNil

Seq无法做到这一点。实际上,只要您调用了构造函数,就会从类型的角度来看有关传递给该构造函数的元素数量的信息。 Shapeless还有SingletonProductArgs:一个类似语法的变量宏,它返回HList而不是Seq