playing with covariance and generics