Why does this switch over a sealed interface compile without a default branch?
sealed interface Expr permits Num, Add {}
record Num(int v) implements Expr {}
record Add(Expr l, Expr r) implements Expr {}
int eval(Expr e) {
return switch (e) {
case Num n -> n.v();
case Add a -> eval(a.l()) + eval(a.r());
};
}