// WITH_STDLIB import kotlin.experimental.ExperimentalTypeInference @OptIn(ExperimentalTypeInference::class) fun build(block: BuilderScope.() -> BB1): ResultProvider = object : ResultProvider { override fun provideResult(): AB1 = "OK" as AB1 } @OptIn(ExperimentalTypeInference::class) fun build2(block: BuilderScope.() -> BB2): ResultProvider = object : ResultProvider { override fun provideResult(): AB2 = "OK" as AB2 } interface BuilderScope { fun getResult(result: ResultProvider): B1 fun getResult2(result: ResultProvider): B2 } interface ResultProvider { fun provideResult(): AR } val resultProvider: ResultProvider = object : ResultProvider { override fun provideResult(): Any = "NOK" } val result = build { getResult(build2 { getResult2(resultProvider) }) } fun box(): String { return result.provideResult().toString() }