But note that 'bool' in Python is not subclassable.
Sure. But that's why I suggested 'Bool' rather than 'bool'. It's a different spelling, but one with a really obvious connection.
I.e. if I read this:
def is_str_list(v: List[Any]) -> Bool[List[str]]:
...
I just think, "OK, it returns a bool, and those mypy people are doing something else funny that I don't need to worry about."
So maybe you should just stick to "bool". TypeGuard is really only useful for people who care about what type checkers do (a surprisingly large contingent, actually, but I would not recommend it for the education department).
I'm fairly sure I *will* just stick with 'bool' in code I write, no matter the outcome of this PEP. But I'm also sure I'll read code written by other people in the future... And EXPLAIN code written by other people to people less knowledgeable than I am.
When explaining code to students or junior colleagues, it feels MUCH easier to explain "Bool[...] is a funny way of spelling 'bool' (in annotations)" than explaining the same of TypeGuard [...].