Skip to content

Commit d508418

Browse files
committed
More tests
1 parent 6f579d1 commit d508418

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

tests/run/typelevel.scala

+27-4
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,22 @@ object Test extends App {
4141
val j2: 2 = i2
4242

4343
trait HList {
44-
def isEmpty: Boolean
44+
transparent def isEmpty: Boolean = length == 0
45+
def length: Int
4546
def head: Any
4647
def tail: HList
4748
}
4849

4950
class HNil extends HList {
50-
transparent override def isEmpty = true
51+
transparent override def length = 0
5152
override def head: Nothing = ???
5253
override def tail: Nothing = ???
5354
}
5455

5556
lazy val HNil: HNil = new HNil
5657

5758
case class HCons[H, T <: HList](hd: H, tl: T) extends HList {
58-
transparent override def isEmpty = false
59+
transparent override def length = 1 + tl.length
5960
override def head: H = this.hd
6061
override def tail: T = this.tl
6162
}
@@ -79,8 +80,28 @@ object Test extends App {
7980
if (xs.isEmpty) Z
8081
else S(size(xs.tail))
8182

83+
transparent def sizeDefensive(xs: HList): Nat = xs.isEmpty match {
84+
case true => Z
85+
case false => S(sizeDefensive(xs.tail))
86+
}
87+
/*
88+
transparent def toInt1[T]: Nat = type T match {
89+
case Z => 0
90+
case S[type N] => toInt[N] + 1
91+
}
92+
93+
transparent def toInt1[T]: Nat = implicit match {
94+
case T <:< Z => 0
95+
case T <:< S[type N] => toInt[N] + 1
96+
}
97+
*/
98+
8299
val s0 = size(HNil)
83100
val s1 = size(xs)
101+
transparent val l0 = HNil.length
102+
val l0a: 0 = l0
103+
transparent val l1 = xs.length
104+
val l1a: 2 = l1
84105

85106
transparent def index(xs: HList, inline idx: Int): Any =
86107
if (idx == 0) xs.head
@@ -92,10 +113,12 @@ object Test extends App {
92113
var ss3: String = s3
93114
def s4 = index(xs, 2)
94115
def ss4: Nothing = s4
116+
val s5 = index(xs, xs.length - 1)
117+
val ss5: String = s5
95118

96119
/** Does not work yet:
97120
98-
implicit class HListDeco(xs: HList) {
121+
implicit class HListDeco(transparent val xs: HList) {
99122
transparent def ++ (ys: HList) = concat(xs, ys)
100123
}
101124

0 commit comments

Comments
 (0)