Enabling a pure Plugin with existing build output never triggers recompilation
Consider the following compilation session:
$ ghc -fplugin ImpurePlugin Foo.hs <Compiles Foo.hs> $ ghc Foo.hs
where ImpurePlugin is a
Plugin which returns
The second invocation of GHC doesn't recompile even though
ImpurePlugin could have changed the generated build output which would now be out of date.
The same thing happens when switching from an impure/fingerprinted plugin to a pure plugin.
The problem is that
pluginRecompileToRecompileRequired just assumes no compilation is required when the current plugin stack is pure, that is either only pure plugins or no plugins at all are registered:
pluginRecompileToRecompileRequired :: Fingerprint -> PluginRecompile -> RecompileRequired pluginRecompileToRecompileRequired old_fp pr = case pr of NoForceRecompile -> UpToDate ForceRecompile -> RecompBecause "Plugin forced recompilation" MaybeRecompile fp -> if fp == old_fp then UpToDate
UpToDate in the
Furthermore I would argue that even switching from having no plugin at all active to having a pure plugin active should trigger recompilation, even though the plugin might be pure it could still choose to affect the build output after all.