// !OPT_IN: kotlin.contracts.ExperimentalContracts // ISSUE: KT-43260 import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract sealed class Either { data class Left(val leftValue: L) : Either() data class Right(val rightValue: R) : Either() } inline fun Either.isLeft(): Boolean { contract { returns(true) implies (this@isLeft is Either.Left) } return this is Either.Left } inline fun Either.isRight(): Boolean { contract { returns(true) implies (this@isRight is Either.Right) } return this is Either.Right } fun test() { val result: Either = Either.Left(RuntimeException("simulating missing code")) if (result.isLeft()) { val cause = result.leftValue.cause } }