blob: 5c33b7a2f3d8f1ec8cd6581945d279bd13cca21b (
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 Test {
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)
}
}
|