Yeah, but in practice you rarely (if ever) call foo() with a literal. In normal code you'll use variables or return values, and if they're annotated, mypy will catch mismatching types.
What you propose will certainly solve the issue when dealing with unannotated code, though.