Why is it a bad idea to allow programmers to specify the covariance and invariance of generics themselves? We could make the Action<T> class covariant, because if we can do an action on T2 < T1, then we can do it on T1, which means Action<T1> < Action<T2>. We could make an immutable List<T2> < List<T1> if T2 < T1
I saw something similar only in Kotlin, but there it was achieved by controlling mutability on the part of the compiler. I have never seen anything like this anywhere else