34 lines
1.1 KiB
Kotlin
Vendored
34 lines
1.1 KiB
Kotlin
Vendored
// FIR_IDENTICAL
|
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
|
|
|
private object Case1 {
|
|
interface Validator<in T>
|
|
|
|
class CharSequenceValidator: Validator<CharSequence>
|
|
|
|
class PredicateValidator<T>(val predicate: (T) -> Boolean): Validator<T>
|
|
|
|
class CompositeValidator<T>(vararg val validators: Validator<T>)
|
|
|
|
fun process(input: String) = true
|
|
|
|
fun main() {
|
|
val validators1 = CompositeValidator(CharSequenceValidator(), PredicateValidator(::process))
|
|
val validators2 = CompositeValidator<String>(CharSequenceValidator(), PredicateValidator(::process))
|
|
val validators3 = CompositeValidator(CharSequenceValidator(), PredicateValidator { it: String -> process(it) })
|
|
}
|
|
}
|
|
|
|
private object Case2 {
|
|
interface Expr<out T>
|
|
data class Add(val left: Expr<Int>, val right: Expr<Int>): Expr<Int>
|
|
data class Subtract(val left: Expr<Int>, val right: Expr<Int>): Expr<Int>
|
|
|
|
fun f() {
|
|
val operators1 = listOf(::Add, ::Subtract)
|
|
val operators2 = listOf<(Expr<Int>, Expr<Int>) -> Expr<Int>>(::Add, ::Subtract)
|
|
}
|
|
|
|
fun <T> listOf(vararg elements: T): List<T> = TODO()
|
|
}
|