// Created on savesnippets.com · https://savesnippets.com/PcvxMzTwTdvpMF sealed class Result { data class Ok(val value: T) : Result() data class Err(val message: String) : Result() object Loading : Result() } fun describe(r: Result): String = when (r) { is Result.Ok -> "got ${r.value}" // r.value smart-cast to Int is Result.Err -> "failed: ${r.message}" Result.Loading -> "still loading…" // No `else` needed — the compiler verifies every variant is handled. // Add a new variant later → every `when` over Result will refuse to compile. } fun main() { println(describe(Result.Ok(42))) println(describe(Result.Err("network down"))) println(describe(Result.Loading)) }