Kotlin: sealed classes

Example:

sealed class Expr data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr()
Sealed classes are used to represent restricted class hierarchies.

Solution:

fun eval(expr: Expr): Double = when (expr) { is Const -> expr.number is Sum -> eval(expr.e1) + eval(expr.e2) // No else required as all cases are covered }

Beginner's Guide to Kotlin