Why'd we bail on doing this? It looks like if no new rules have been added (the isDirty check), we should be okay to just return whatever the result of the last run was (the `this.cache` stuff)... am I missing something? Or did you think it was better to run the user's custom `fn` each time?