We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent ff2922c commit c90bc54Copy full SHA for c90bc54
tests/pos/structural-pdt-pdgadt.scala
@@ -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