(
Size: a a a
(
(
(
AA
AN
(
(
I
interface Typelist<in T, out U>
interface Piano
interface O: Piano
interface S<T: Piano>: Piano
typealias One = S<O>
typealias Two = S<One>
typealias Three = S<Two>
@JvmName("len1")
fun <TL: Typelist<*, Typelist<*, Typelist<*, Nothing>>>> TL.length() = object : Three
@JvmName("len2")
fun <TL: Typelist<*, Typelist<*, Nothing>>> TL.length() = object : Two
@JvmName("len3")
fun <TL: Typelist<*, Nothing>> TL.length() = object : One
@JvmName("contains1")
fun <T, TL: Typelist<T, *>> TL.contains() = 1
@JvmName("contains2")
fun <T, TL: Typelist<*, Typelist<T, *>>> TL.contains() = 1
@JvmName("contains3")
fun <T, TL: Typelist<*, Typelist<*, Typelist<T, Nothing>>>> TL.contains() = 1
typealias A = Typelist<Any, Nothing>
typealias B = Typelist<Any, Typelist<Any, Nothing>>
typealias Integral = Typelist<Int, Typelist<Short, Typelist<Long, Nothing>>>
inline fun <reified T> Function<T>.eq() = 1
val ALEN = A::length.eq<One>()
val BLEN = B::length.eq<Two>()
val ILEN = Integral::length.eq<Three>()
// Compiler error
// val ILEN2 = Integral::length.eq<Two>()
val LI = (object : Integral {}).contains<Long, Integral>()
val SI = (object : Integral {}).contains<Short, Integral>()
// Compiler error
// val StrI = (object : Integral {}).contains<String, Integral>()
I
(
interface Typelist<in T, out U>
interface Piano
interface O: Piano
interface S<T: Piano>: Piano
typealias One = S<O>
typealias Two = S<One>
typealias Three = S<Two>
@JvmName("len1")
fun <TL: Typelist<*, Typelist<*, Typelist<*, Nothing>>>> TL.length() = object : Three
@JvmName("len2")
fun <TL: Typelist<*, Typelist<*, Nothing>>> TL.length() = object : Two
@JvmName("len3")
fun <TL: Typelist<*, Nothing>> TL.length() = object : One
@JvmName("contains1")
fun <T, TL: Typelist<T, *>> TL.contains() = 1
@JvmName("contains2")
fun <T, TL: Typelist<*, Typelist<T, *>>> TL.contains() = 1
@JvmName("contains3")
fun <T, TL: Typelist<*, Typelist<*, Typelist<T, Nothing>>>> TL.contains() = 1
typealias A = Typelist<Any, Nothing>
typealias B = Typelist<Any, Typelist<Any, Nothing>>
typealias Integral = Typelist<Int, Typelist<Short, Typelist<Long, Nothing>>>
inline fun <reified T> Function<T>.eq() = 1
val ALEN = A::length.eq<One>()
val BLEN = B::length.eq<Two>()
val ILEN = Integral::length.eq<Three>()
// Compiler error
// val ILEN2 = Integral::length.eq<Two>()
val LI = (object : Integral {}).contains<Long, Integral>()
val SI = (object : Integral {}).contains<Short, Integral>()
// Compiler error
// val StrI = (object : Integral {}).contains<String, Integral>()
(
(
I
AN
AA
interface Typelist<in T, out U>
interface Piano
interface O: Piano
interface S<T: Piano>: Piano
typealias One = S<O>
typealias Two = S<One>
typealias Three = S<Two>
@JvmName("len1")
fun <TL: Typelist<*, Typelist<*, Typelist<*, Nothing>>>> TL.length() = object : Three
@JvmName("len2")
fun <TL: Typelist<*, Typelist<*, Nothing>>> TL.length() = object : Two
@JvmName("len3")
fun <TL: Typelist<*, Nothing>> TL.length() = object : One
@JvmName("contains1")
fun <T, TL: Typelist<T, *>> TL.contains() = 1
@JvmName("contains2")
fun <T, TL: Typelist<*, Typelist<T, *>>> TL.contains() = 1
@JvmName("contains3")
fun <T, TL: Typelist<*, Typelist<*, Typelist<T, Nothing>>>> TL.contains() = 1
typealias A = Typelist<Any, Nothing>
typealias B = Typelist<Any, Typelist<Any, Nothing>>
typealias Integral = Typelist<Int, Typelist<Short, Typelist<Long, Nothing>>>
inline fun <reified T> Function<T>.eq() = 1
val ALEN = A::length.eq<One>()
val BLEN = B::length.eq<Two>()
val ILEN = Integral::length.eq<Three>()
// Compiler error
// val ILEN2 = Integral::length.eq<Two>()
val LI = (object : Integral {}).contains<Long, Integral>()
val SI = (object : Integral {}).contains<Short, Integral>()
// Compiler error
// val StrI = (object : Integral {}).contains<String, Integral>()
AN
I
(
(
(