{-# LANGUAGE OverloadedStrings #-} module HumblePrelude.Plugin (plugin) where import HumblePrelude import Control.Exception (throwIO) import GhcPlugins import HsSyn (hsmodImports, simpleImportDecl) import Panic (GhcException(..)) plugin :: Plugin plugin = defaultPlugin { parsedResultAction = parsedPlugin , pluginRecompile = flagRecompile } parsedPlugin :: [CommandLineOption] -> ModSummary -> HsParsedModule -> Hsc HsParsedModule parsedPlugin [name] _ pm = do let rep = noLoc $ simpleImportDecl $ mkModuleName name pure pm { hpm_module = fmap (\m -> m { hsmodImports = rep:hsmodImports m }) $ hpm_module pm } parsedPlugin _ _ _ = liftIO $ throwIO $ ProgramError "Please specify a module name (e.g -fplugin-opt=HumblePrelude.Plugin:HumblePrelude.Extras)"