我试图将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
方法,需要添加到此的最小代码量是多少?
我担心没有少量......