It’s true that having “never” in a parameter type (please use “parameter” name for the method declaration, “argument” is what you pass to a parameter when you call the method) would allow to use any type in an overriding method from contravariance/LSP point of view. But at the same time the interface with the “never” parameter type isn’t useful at all, because “never” cannot accept any type.
Same as “never” in a return type means “this function never returns”, “never” in a parameter type means “you can never call this”. That’s because if you have interface “Foo" with method "doFoo(never $a): void”, you might be able to override it with “class Bar implements Foo” and method “doFoo(A $a)”, but at the same time it only allows you to call “Bar::doFoo(new A())”, it doesn’t allow you to call “Foo::doFoo(new A())”. Which is probably not what people expect from a polymorphic method. So having the method on the interface “Foo” is completely useless. Ondřej Mirtes