Damien
out
ephemient
B : A
val c = C<B>() c.foo { value: A -> C<A>(value) }
val c: C<A> = C<B>()
<out T>
fun <T> C<T>.foo(f: (T) -> C<T>): C<T>
class C<out T>(val member: T) { fun foo(f: (value: T) -> C<@UnsafeVariance T>): C<T> }
A modern programming language that makes developers happier.