Wybierz `sealed`, gdy potrzebujesz zamkniętego zestawu wariantów, które mogą nieść różne dane i typy (sum type). Pozwala to na exhaustive `when`, a `enum` to stały zestaw instancji jednego typu.
sealed interface Result
data class Ok(val value: Int) : Result
data class Err(val message: String) : Result
fun handle(r: Result) = when (r) {
is Ok -> r.value
is Err -> 0
}