implement parameterized types, including some in the std lib