don't forget type erasure