A strategy passed to a constructor as a callable, which used to be a closure with a comment and is now something an analyser can check.
final readonly class RetryPolicy
{
/** @param Closure(int): int $backoff */
public function __construct(
private Closure $backoff,
) {}
}
// and the call site
new RetryPolicy($this->exponentialBackoff(...));
The docblock is what makes the callable checkable, and without it the property is a Closure that could take anything. The first-class callable syntax matters here because an analyser can resolve $this->exponentialBackoff(...) to a real method and compare signatures, which it cannot do with a string or an array callable.