The block feels clumsy to me, and I prefer the exception to originate from where the actual error occurred.

Adding in the `@failed_fast` seems like a legitimate use case of "hooking into" the exception rescue: it's an exceptional case, and we need to hook in our own behaviour to the exception.

Put another way, I would never provide that interface from `ArityValidator` if I didn't know about this corner case, and I dislike designing APIs that optimize for corner cases.