Scala无形:如何将hlist.Mapper转换为case类?

时间:2017-04-28 13:47:15

标签: scala shapeless

我是一个全新的无形的人,我想将Mapper[mix.type, HNil]#Out转换为案例类

我该怎么做? (如果您需要更多信息,请告诉我......)

1 个答案:

答案 0 :(得分:1)

只有在定义一个与此Mapper#Out完全相同的形状的案例类时才会有效。如果是这种情况,您可以使用shapeless.Generic创建案例类的实例:

val mout = ... // HList coming from your Mapper
case class A(i: Int, s: String)
shapeless.Generic[A].from(mout): A

假设Generic#ReprMapper[mix.type, HNil]#Out属于同一类型,您可以使用以下方法检查:

val mapper = the[Mapper[mix]]
val gen    = the[Generic[A]]
implicitly[mapper#Out =:= gen#Repr] // This only complies if scalac can
                                    // prove equality between these types