blob: 713d066892b03a9d47546c690e14603aa96a6b1c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
sealed trait HList
sealed trait HNil extends HList
sealed trait ::[+H, +T <: HList] extends HList
case class Size[L <: HList](value: Int)
object Size {
implicit val caseHNil: Size[HNil] = Size(0)
implicit def caseHCons[H, T <: HList](implicit e: Size[T]): Size[H :: T] = Size(e.value + 1)
}
object HListTest {
def main(args: Array[String]): Unit = {
assert(implicitly[Size[HNil]].value == 0)
assert(implicitly[Size[Int :: HNil]].value == 1)
assert(implicitly[Size[Int :: Int :: HNil]].value == 2)
assert(implicitly[Size[Int :: Int :: Int :: HNil]].value == 3)
}
}
|