Am 08.06.21 um 18:51 schrieb Guido van Rossum:
Why do type checkers have to special-case sentinels? Until this idiom has become popular, using `Literal[SENTINEL]` seems the most logical approach. The only change to type checkers in that case would be to treat `sentinel` as one of the types whose values can be used in `Literal[]`.

Unless I misunderstand something (quite possible!), the following idiom does not currently work with type checkers and is not supposed to work:

    X = foo()
    def bar(x: Literal[X]) -> None: ...

This means that "X = sentinel()" would need to be special-cased.

 - Sebastian