Skip to content

Commit af61f0f

Browse files
committed
Pretype nested transparent applications
This lets us way HList concat in the most trivial way possible.
1 parent 01ee90c commit af61f0f

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

tests/run/typelevel.scala

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)