It's fine to raise an error when the matcher expression itself is invalid and would never be able to match against _any_ object.  That's the case here: independent of any object to match against, the `have_http_status(:invalid_arg)` expression is invalid, so raising an error early is fine.

Where it's not good to raise an error is when matching against an unexpected type of object.  We want users to be able to use matchers in composed expressions like `expect(array).to include(some_matcher)`, where one of the items in the array matches `some_matcher`.  We don't want errors raised when it checks to see if other items match `some_matcher`, even if it's a nonsensical question to compare the matcher against a particular value.

Does that distinction make sense?