// WITH_STDLIB import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract sealed class NetRequestStatus { abstract val value: T? data class Error( val error: Throwable, override val value: T? = null, ) : NetRequestStatus() } @OptIn(ExperimentalContracts::class) fun NetRequestStatus.isError(): Boolean { contract { returns(true) implies (this@isError is NetRequestStatus.Error) } return (this is NetRequestStatus.Error) } fun successOrThrow() { val nextTerminal: NetRequestStatus = NetRequestStatus.Error(Exception()) if (nextTerminal.isError()) throw nextTerminal.error } fun box(): String { try { successOrThrow() } catch (e: Exception) { return "OK" } return "'successOrThrow<...>()' should throw an exception" }