paulblessing
T
interface A { fun doSomething(): A } data class B(val str: String) : A { override fun doSomething(): B { val c = copy() return c } }