import kotlin.reflect.KClass class Thing(val key: T, val c: KClass, neighbours: () -> List>) {} val a = Thing(1, Int::class, { listOf(b, c) }) val b = Thing(1, Int::class, { listOf(a, c) }) val c = Thing("hello", String::class, { listOf(a, b) })