Right...that wasn't thinking about the need for the message.  I think we should switch back to `matchers.matches?` to get the message and only have it called once.  However, once you do that, it's important that you clone the matcher yourself before calling `matches?` on it to avoid bugs with matchers that use internal memoization based on the `actual` value.  It'd be good to have a failing spec for that before you fix it -- you can see an example of a spec like that in `composable_spec.rb`.