@@ -28,4 +28,39 @@ object Test extends App {
28
28
println(x0)
29
29
println(x1)
30
30
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 )))
31
66
}
0 commit comments