@@ -28,4 +28,39 @@ object Test extends App {
2828 println(x0)
2929 println(x1)
3030 println(x2)
31+
32+ trait HList {
33+ def isEmpty : Boolean
34+ def head : Any
35+ def tail : HList
36+ }
37+
38+ class HNil extends HList {
39+ transparent override def isEmpty = true
40+ override def head : Nothing = ???
41+ override def tail : Nothing = ???
42+ }
43+
44+ case object HNil extends HNil
45+
46+ case class HCons [H , T <: HList ](hd : H , tl : T ) extends HList {
47+ transparent override def isEmpty = false
48+ override def head : H = this .hd
49+ override def tail : T = this .tl
50+ }
51+
52+ transparent def concat (xs : HList , ys : HList ): HList =
53+ if (xs.isEmpty) ys
54+ else HCons (xs.head, concat(xs.tail, ys))
55+
56+ transparent val xs = HCons (1 , HCons (" a" , HNil ))
57+
58+ val r0 = concat(HNil , HNil )
59+ val r1 = concat(HNil , xs)
60+ val r2 = concat(xs, HNil )
61+ val r3 = concat(xs, xs)
62+
63+ val r4 = concat(HNil , HCons (1 , HCons (" a" , HNil )))
64+ val r5 = concat(HCons (1 , HCons (" a" , HNil )), HNil )
65+ val r6 = concat(HCons (1 , HCons (" a" , HNil )), HCons (1 , HCons (" a" , HNil )))
3166}
0 commit comments