1. What is type(list[str]())? list or list[str]?
PEP 585 says it should be list. Type erasure happens at object instantiation.
2. Would it work with list subclasses? I.e.
class L(list): pass
x: L[str]
I think this will work without any extra code. But I'll make sure to test it.
3. Don't forget about __reduce__().
Good point, I'll add it to the list of tasks.
4. Will be a cache for parametrized generics?
Oh, we probably need that (it proved essential for typing.py's List[int] etc.). I'll put it in the plan.