A generic parameter can be bound in two places: the header of a generic class, or a function parameters body. If we had explicit generic syntax, the example from PEP 612 would look like this: ``` def expects_int_first<P>(x: Callable[Concatenate[int, P], int]) -> None: ... ``` which isn't legal python but makes it clearer what's happening: P is in fact bound by `expects_int_first`, which happens implicitly because `P` appears in the arguments. It's a little unfortunate that we don't have java-like generic syntax in Python because that makes it much clearer where the binding happens. --- In `SomeCallableType`, P can't be bound because only classes and functions bind, `SomeCallableType` is just a type alias. It is *not* a generic. So indexing it by `P` isn't going to make sense; different type checkers will give different errors because there are a few reasons it doesn't make sense, but none of them will accept it. We *can* make a generic callable protocol that behaves this way but it's sort of horrible: class SomeCallableType(Generic[P]): def __call__(self, _x: int, /, *args: P.args, **kwargs: P.kwargs) -> None: ...