Yep this should be moved to a private helper. As far as memoization goes, I'm not sold just yet. My issue is how the matchers behave. They are stateful, but are generally intended for single use.

If I memoize this, and for some reason the same matcher is re-used, the generated descriptions will be incorrect after the first call to `failure_message`.