@elyn @ancoghlan a lot of the python internal type machinery was added before python had spellable types, which now shows up as those strange breaks in the type math.
there's a similar case where `float` actually means `float | int`, so there's now no way of saying just float, no int, even though `isinstance(1, float) == False`.

From recent discussions around “what should have a PEP”, it’s clear that this should have been a PEP long ago. Better late than never, I guess! We submit this PEP to explain the changes, seek consensus on whether they are good, propose the remaining changes, and set best practices for new modules. Please head to the PEP page to read it. The initial version is below, so you can quote it, and so that if the PEP is changed future readers can make sense of the discussion. ▶ Text of the PEP:
@hugovk Unfortunately, we're still the largest even when only looking at the normative part (and exclude all the quotes and workaround analysis):
1160: pep-0817.rst
997: pep-0703.rst
946: pep-0654.rst
851: pep-0804.rst
780: pep-0646.rst
752: pep-0501.rst
708: pep-0642.rst
668: pep-0492.rst
631: pep-3119.rst
613: pep-3101.rst
We're roughly the same normative length as PEP 440, but that used a different PEP structure so it's not in the list (https://gist.github.com/konstin/79959d713be3b4c6605ba6febcc8beec)