像在Shapeless中一样将HLists转换回元组

时间:2016-08-04 18:44:52

标签: scala shapeless

我试图将shapeless的内部理解为练习。 现在,我对tupled的方法HList的工作原理感到困惑。

示例:

scala> val l = "er" :: 3 :: HNil
l: shapeless.::[String,shapeless.::[Int,shapeless.HNil]] = er :: 3 :: HNil
scala> l.tupled
res0: (String, Int) = (er,3)

帮助我完成代码的是编写我想要理解的类的最小版本。这是HList

scala> :paste
// Entering paste mode (ctrl-D to finish)

sealed trait HList

final class HNil extends HList {
def ::[T](v : T) = HCons(v, this)
}

val HNil = new HNil()

final case class HCons[H, T <: HList](head : H, tail : T) extends HList {
def ::[T](v : T) = HCons(v, this)
}

type ::[H, T <: HList] = HCons[H, T]

// Exiting paste mode, now interpreting.

defined trait HList
defined class HNil
HNil: HNil = HNil@7f32618c
defined class HCons
defined type alias $colon$colon

为了实现有效的tupled方法,需要添加到此的最小代码量是多少? 我担心没有少量......

0 个答案:

没有答案