It seems like a function like `rewritePlugin` is something we could/should just build on top of the existing plugin mechanism, and have something along the line of:
> -- | Create a 'TcPluginSolver' from the provided rewrite function
> rewritePluginSolver ::
> (s -> TyCon -> [TcType] -> TcPluginM (Maybe TcType)) ->
where `rewritePlugin` just traverses constraints with the given rewrite and creates the evidence, emits new wanteds, etc.
(We could develop such a function outside of the `ghc` package, and only once we have a satisfactory solution, perhaps consider it for inclusion in the `ghc` package.)
This way, we won't have to make the common case of simplifying type families slow, and still provide a straightforward API.