bug: bound method identified as `(ParamSpec(Unknown)) -> Unknown` (by decorators) rejected as a `Callable[..., Any]`
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 516
- PR merge metrics
- No merged PRs in 30d
Description
### Describe the Bug
A class method decorated like:
```
class Controller:
@deco1 # typed: def deco1[**P, R](func: Callable[P, R]) -> Callable[P, R]:
@deco2 # untyped: def deco2(func):
def controller_body(self):
pass
```
becomes a bound method whose revealed type is `(ParamSpec(Unknown)) -> Unknown` when taken as bound (`Controller().controller_body`).
However, Pyrefly rejects it as `Callable[..., Any];`. The same revealed type from a top-level function or explicit expression is accepted.
See the full PoC in the sandbox.
### Sandbox Link
https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSIEAtsbgE4AuABBOnMTAMYMA66YdXFSadcUWNwi42hVNk4sa9ZgGFU4ubD4ChTBqWKsA5otqMmdGADcY6gPr6OfZ1hhgmmLrgCMAbQBU-gAKADRMAEoAugAUYACu6JyITGoa2LC%2BoRGRAJRMALQAfCnqUJowmWFRiHxMdRYwDHF06EzxiS58nu6eogBMsQmcOTWt9ZZNLW1DnYllcHAp0gyC4jB0o-VMAAK9PrX1u159B3XdIsursHR2eJik0XAwUGAjp1tMxKgLLlvnGLgGAALdaPZ6vTYfOpfH7oFxHUTePgI3AnVzuXBxBhwCCeOztTjRN5jaHfOCzMCtAC8S3QKzE1yJhFEdKu61uuHu2nQfSYNL23miewGKkuDNBOVk6EBILoORyLksNnsjhgsXQCvQStsUAcBjVlL6mr4CQA7nRUMQOJg%2BSw2BxuIQzRbiOrNc7LdbeTTWOwuAwnehzZb1UaTUGXda7JjsbiYLbfQ6Ax7XTGcXiCZqQCEQGRLGAoKRCAwhFAKABiJhBUj5wtMNBYPD4C78CBGZqoBhSdCEPiVgDKMHjQIYDGIcEQAHpJ3m3IXCPQjJOYOhJ5hcJw4JOWZB2xau9JJ216ExUFZUNByi3dx2D61cMQ73Be%2BgyMDpPkbHQcdJbTwQAAzIQ3gnCAfC%2BOsgjfpE4bUGYDAwJg%2BSYBAliSDYtoAORttKliYXw0oMPklgAI5xKhiH5AA1jApD5KgnCcPAiw0phpqoC0%2BHoCAAC%2BOYMV2NgAGLQDAFANjgBAkOQPFAA
### (Only applicable for extension issues) IDE Information
_No response_
Contributor guide
Assessment
This issue has not been assessed yet.