Shapeless:有没有办法从 case class 或元组中获取 Hlist 类型
Shapeless: is there a way to get Hlist type from a case class or a tuple
我对无形完全陌生。我从列表中创建一个案例 class,如下所示:
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.getTypesForHlist
或 MyCaseClass.getTypesForHlist
之类的结果 Option[Int]::Option[Double]...
是否存在。
对于大小写 类(和元组,这些也是大小写 类!),使用 Generic
:
case class A(i: Int, s: String)
shapeless.Generic[A].to(A(1, "")) // Int :: String :: HNil
这在 Seq
上是不可能的。事实上,一旦您调用了构造函数,从类型的角度来看,有关您传递给该构造函数的元素数量的信息就消失了。 Shapeless 还具有 SingletonProductArgs
:一个用于可变参数的宏,类似于 returns 和 HList
而不是 Seq
.
的语法
我对无形完全陌生。我从列表中创建一个案例 class,如下所示:
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.getTypesForHlist
或 MyCaseClass.getTypesForHlist
之类的结果 Option[Int]::Option[Double]...
是否存在。
对于大小写 类(和元组,这些也是大小写 类!),使用 Generic
:
case class A(i: Int, s: String)
shapeless.Generic[A].to(A(1, "")) // Int :: String :: HNil
这在 Seq
上是不可能的。事实上,一旦您调用了构造函数,从类型的角度来看,有关您传递给该构造函数的元素数量的信息就消失了。 Shapeless 还具有 SingletonProductArgs
:一个用于可变参数的宏,类似于 returns 和 HList
而不是 Seq
.