module Data.Record.Anon.Internal.Plugin (plugin) where
import GHC.TcPlugin.API
import qualified GHC.Plugins
import Data.Record.Anon.Internal.Plugin.TC.NameResolution
import Data.Record.Anon.Internal.Plugin.TC.Rewriter
import Data.Record.Anon.Internal.Plugin.TC.Solver
import Data.Record.Anon.Internal.Plugin.Source
plugin :: GHC.Plugins.Plugin
plugin :: Plugin
plugin = Plugin
GHC.Plugins.defaultPlugin {
tcPlugin :: TcPlugin
GHC.Plugins.tcPlugin = \[CommandLineOption]
_args -> TcPlugin -> Maybe TcPlugin
forall a. a -> Maybe a
Just (TcPlugin -> Maybe TcPlugin) -> TcPlugin -> Maybe TcPlugin
forall a b. (a -> b) -> a -> b
$
TcPlugin -> TcPlugin
mkTcPlugin TcPlugin
tcPlugin
, parsedResultAction :: [CommandLineOption]
-> ModSummary -> HsParsedModule -> Hsc HsParsedModule
GHC.Plugins.parsedResultAction = \[CommandLineOption]
args ModSummary
_modSummary ->
[CommandLineOption] -> HsParsedModule -> Hsc HsParsedModule
sourcePlugin [CommandLineOption]
args
, pluginRecompile :: [CommandLineOption] -> IO PluginRecompile
GHC.Plugins.pluginRecompile =
[CommandLineOption] -> IO PluginRecompile
GHC.Plugins.purePlugin
}
tcPlugin :: TcPlugin
tcPlugin :: TcPlugin
tcPlugin = TcPlugin :: forall s.
TcPluginM 'Init s
-> (s -> TcPluginSolver)
-> (s -> UniqFM TcPluginRewriter)
-> (s -> TcPluginM 'Stop ())
-> TcPlugin
TcPlugin {
tcPluginInit :: TcPluginM 'Init ResolvedNames
tcPluginInit = TcPluginM 'Init ResolvedNames
nameResolution
, tcPluginSolve :: ResolvedNames -> TcPluginSolver
tcPluginSolve = ResolvedNames -> TcPluginSolver
solve
, tcPluginRewrite :: ResolvedNames -> UniqFM TcPluginRewriter
tcPluginRewrite = ResolvedNames -> UniqFM TcPluginRewriter
rewrite
, tcPluginStop :: ResolvedNames -> TcPluginM 'Stop ()
tcPluginStop = TcPluginM 'Stop () -> ResolvedNames -> TcPluginM 'Stop ()
forall a b. a -> b -> a
const (TcPluginM 'Stop () -> ResolvedNames -> TcPluginM 'Stop ())
-> TcPluginM 'Stop () -> ResolvedNames -> TcPluginM 'Stop ()
forall a b. (a -> b) -> a -> b
$ () -> TcPluginM 'Stop ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
}