module Hint.Configuration (
setGhcOption, setGhcOptions,
setUseLanguageExtensions,
Optimizations(..), setOptimizations,
setInstalledModsAreInScopeQualified ) where
import Control.Monad.Error
import qualified GHC
import Hint.Base
setGhcOptions :: [String] -> Interpreter ()
setGhcOptions opts =
do ghc_session <- fromSessionState ghcSession
old_flags <- liftIO $ GHC.getSessionDynFlags ghc_session
(new_flags, not_parsed) <- liftIO $ GHC.parseDynamicFlags old_flags opts
when (not . null $ not_parsed) $
throwError $ UnknownError (concat ["flag: '", unwords opts,
"' not recognized"])
liftIO $ GHC.setSessionDynFlags ghc_session new_flags
return ()
setGhcOption :: String -> Interpreter ()
setGhcOption opt = setGhcOptions [opt]
setUseLanguageExtensions :: Bool -> Interpreter ()
setUseLanguageExtensions True = do setGhcOption "-fglasgow-exts"
setGhcOption "-fextended-default-rules"
setUseLanguageExtensions False = do setGhcOption "-fno-glasgow-exts"
setGhcOption "-fno-extended-default-rules"
data Optimizations = None | Some | All deriving (Eq, Read, Show)
setOptimizations :: Optimizations -> Interpreter ()
setOptimizations None = setGhcOption "-O0"
setOptimizations Some = setGhcOption "-O1"
setOptimizations All = setGhcOption "-O2"
setInstalledModsAreInScopeQualified :: Bool -> Interpreter ()
setInstalledModsAreInScopeQualified b = onConf $ \c -> c{all_mods_in_scope = b}