Skip to content

Commit c90bc54

Browse files
committed
Add pos test for structural pdgadt
1 parent ff2922c commit c90bc54

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

tests/pos/structural-pdt-pdgadt.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
type typed[E <: Expr, V] = E & { type T = V }
2+
3+
trait Expr { type T }
4+
case class LitInt(x: Int) extends Expr { type T >: Int }
5+
case class Add(e1: Expr typed Int, e2: Expr typed Int) extends Expr { type T >: Int }
6+
case class LitBool(x: Boolean) extends Expr { type T >: Boolean }
7+
case class Or(e1: Expr typed Boolean, e2: Expr typed Boolean) extends Expr { type T >: Boolean }
8+
9+
def eval(e: Expr): e.T = e match
10+
case LitInt(x) => x
11+
case Add(e1, e2) => eval(e1) + eval(e2)
12+
case LitBool(b) => b
13+
case Or(e1, e2) => eval(e1) || eval(e2)

0 commit comments

Comments
 (0)