
I'm quite surprised that PEP 661 and the following discussion doesn't mentioned PEP 484, which already define a sentinel pattern (which are named singleton types): https://www.python.org/dev/peps/pep-0484/#support-for-singleton-types-in-uni... In fact, the following example works fine in mypy: ```python from typing import Union from enum import Enum class Empty(Enum): token = 0 _empty = Empty.token def func(x: Union[int, Empty]) -> int: return 0 if x is _empty else x # check must be done with `is` ``` Yes, it's not a one-liner declaration, but it has existed for 6 years, and it's a quite logical pattern which don't need additional stuff (and it also allows more customization, like overriding `__bool__`). Personally, because sentinel is not something I do often, I don't mind having more than 1 lines to declare it. However, I admit that using directly the sentinel as a type annotation instead of its type would be very nice, and that's unfortunately not possible with the existing enum pattern (and will never be because of PEP 604). P.S. I don't see PEP 604 compatibility in the current reference implementation.