The annotation '+T' declares type T to be used only in covariant positions. That is why we need to use a trick and abstract over the parameter type of method 'push'.