A<T>.fix(): A<out T> = this
fun <T: Any> f(a: A<T?>): B<T, T?> = a as B<T, T?>
fun main() {
f(AImpl<String>().fix())
}
Ну или вот так (это что-то в духе Arrow, если я не ошибаюсь)
Сам только что смотрел, как сделано в Arrow. Ну, у них там для определения контейнера пустые классы используются, тут было бы что-то вроде class Nullable<T> : Type<ForNullable, T?>()
Обсуждают сегодня