Hi Andrew, After discussing offline with Ivan & Jukka, I think folks in general are partial towards shorter names. For that reason the three of us came to a consensus on ParamSpec. I much less partial to ArgSpec, as I'd like to preserve the distinction between parameters (the interface of a callable, and thus what a ParamSpec would actually capture), and arguments, which are particular to a given call-site. What are your thoughts on ParamSpec?
As for all of those kinds of parameter kinds (positional only, keyword only, *args, **kwargs, default), the complexity of those and their inability to be captured by other typing constructs was the driving force behind the idea of ParamSpecs. I'm not sure what you mean by "provid[ing] these kinds of parameters explicitly", but the implementation of pyre_extensions.ParameterSpecification we have does in fact capture all of that information and propagate it.
For example: ``` P = ParamSpec("P") def decorator(x: Callable[P, int]) -> Callable[P, str]: ... @decorator def foo(__positional_only: bool, normal: int, *args: str, keyword_only: float, **kwargs: int): -> int...
reveal_type(foo) # equivalent in every way to the above definition, only altering the return type ``` Is that what you're wondering about? Best, Mark Mendoza