Consider a sealed interface `Expr` with subtypes. What does this code print?
sealed interface Expr
data class Num(val v: Int) : Expr
data class Add(val l: Expr, val r: Expr) : Expr
fun eval(e: Expr): Int = when (e) {
is Num -> e.v
is Add -> eval(e.l) + eval(e.r)
}
fun main() {
println(eval(Add(Num(3), Num(4))))
}