Add rewriting to typechecking plugins
Type-checking plugins can now directly rewrite type-families. The TcPlugin record is given a new field, tcPluginRewrite. The plugin specifies how to rewrite certain type-families with a value of type `UniqFM TyCon TcPluginRewriter`, where: type TcPluginRewriter = RewriteEnv -- Rewriter environment -> [Ct] -- Givens -> [TcType] -- type family arguments -> TcPluginM TcPluginRewriteResult data TcPluginRewriteResult = TcPluginNoRewrite | TcPluginRewriteTo { tcPluginRewriteTo :: Reduction , tcRewriterNewWanteds :: [Ct] } When rewriting an exactly-saturated type-family application, GHC will first query type-checking plugins for possible rewritings before proceeding. Includes some changes to the TcPlugin API, e.g. removal of the EvBindsVar parameter to the TcPluginM monad.
Showing
- compiler/GHC/Tc/Module.hs 12 additions, 7 deletionscompiler/GHC/Tc/Module.hs
- compiler/GHC/Tc/Plugin.hs 31 additions, 30 deletionscompiler/GHC/Tc/Plugin.hs
- compiler/GHC/Tc/Solver/Interact.hs 14 additions, 13 deletionscompiler/GHC/Tc/Solver/Interact.hs
- compiler/GHC/Tc/Solver/Monad.hs 1 addition, 1 deletioncompiler/GHC/Tc/Solver/Monad.hs
- compiler/GHC/Tc/Solver/Rewrite.hs 101 additions, 40 deletionscompiler/GHC/Tc/Solver/Rewrite.hs
- compiler/GHC/Tc/Types.hs 125 additions, 43 deletionscompiler/GHC/Tc/Types.hs
- compiler/GHC/Tc/Utils/Monad.hs 3 additions, 1 deletioncompiler/GHC/Tc/Utils/Monad.hs
- compiler/GHC/Types/Unique/FM.hs 10 additions, 0 deletionscompiler/GHC/Types/Unique/FM.hs
- docs/users_guide/extending_ghc.rst 94 additions, 18 deletionsdocs/users_guide/extending_ghc.rst
- testsuite/tests/ghci/should_run/tc-plugin-ghci/TcPluginGHCi.hs 6 additions, 4 deletions...uite/tests/ghci/should_run/tc-plugin-ghci/TcPluginGHCi.hs
- testsuite/tests/tcplugins/ArgsPlugin.hs 7 additions, 7 deletionstestsuite/tests/tcplugins/ArgsPlugin.hs
- testsuite/tests/tcplugins/Common.hs 25 additions, 9 deletionstestsuite/tests/tcplugins/Common.hs
- testsuite/tests/tcplugins/NullaryPlugin.hs 7 additions, 7 deletionstestsuite/tests/tcplugins/NullaryPlugin.hs
- testsuite/tests/tcplugins/RewritePerfDefs.hs 102 additions, 0 deletionstestsuite/tests/tcplugins/RewritePerfDefs.hs
- testsuite/tests/tcplugins/RewritePerfPlugin.hs 96 additions, 0 deletionstestsuite/tests/tcplugins/RewritePerfPlugin.hs
- testsuite/tests/tcplugins/RewritePlugin.hs 87 additions, 0 deletionstestsuite/tests/tcplugins/RewritePlugin.hs
- testsuite/tests/tcplugins/TcPlugin_Rewrite.hs 23 additions, 0 deletionstestsuite/tests/tcplugins/TcPlugin_Rewrite.hs
- testsuite/tests/tcplugins/TcPlugin_Rewrite.stderr 1 addition, 0 deletionstestsuite/tests/tcplugins/TcPlugin_Rewrite.stderr
- testsuite/tests/tcplugins/TcPlugin_RewritePerf.hs 25 additions, 0 deletionstestsuite/tests/tcplugins/TcPlugin_RewritePerf.hs
- testsuite/tests/tcplugins/TcPlugin_RewritePerf.stderr 25 additions, 0 deletionstestsuite/tests/tcplugins/TcPlugin_RewritePerf.stderr
Loading
Please register or sign in to comment