-- | Config, input and output types for the simplified GHC API. module Language.Haskell.GHC.Simple.Types ( Default (..), -- Configuration CompConfig, cfgGhcFlags, cfgUseTargetsFromFlags, cfgUpdateDynFlags, cfgGhcLibDir, cfgUseGhcErrorLogger, -- Results and errors CompiledModule (..), CompResult (..), Error (..), Warning (..), ghcSuccess ) where -- GHC imports import GHC -- Misc. stuff import Data.Default data CompConfig = CompConfig { -- | GHC command line flags to control the Haskell to STG compilation -- pipeline. Both static and dynamic flags may be set here. -- For instance, passing @["-O2", "-DHELLO"]@ here is equivalent to -- passing @-O2 -DHELLO@ to the @ghc@ binary. -- -- Note that flags set here are overridden by any changes to 'DynFlags' -- performed by 'cfgUpdateDynFlags', and that '--make' mode is always -- in effect. -- -- Default: @[]@ cfgGhcFlags :: [String], -- | If file or module names are found among the 'cfgGhcFlags', -- should they be used as targets, in addition to any targets given by -- other arguments to 'withStg' et al? -- -- Default: @True@ cfgUseTargetsFromFlags :: Bool, -- | Modify the dynamic flags governing the compilation process. -- Changes made here take precedence over any flags passed through -- 'cfgGhcFlags'. -- -- Default: @id@ cfgUpdateDynFlags :: DynFlags -> DynFlags, -- | Use GHC's standard logger to log errors and warnings to the command -- line? Errors and warnings are always collected and returned, -- regardless of the value of this setting. -- -- Output other than errors and warnings (dumps, etc.) are logged using -- the standard logger by default. For finer control over logging -- behavior, you should override 'log_action' in 'cfgUpdateDynFlags'. -- -- Default: @False@ cfgUseGhcErrorLogger :: Bool, -- | Path to GHC's library directory. If 'Nothing', the library directory -- of the system's default GHC compiler will be used. -- -- Default: @Nothing@ cfgGhcLibDir :: Maybe FilePath } instance Default CompConfig where def = CompConfig { cfgGhcFlags = [], cfgUseTargetsFromFlags = True, cfgUpdateDynFlags = id, cfgUseGhcErrorLogger = False, cfgGhcLibDir = Nothing } -- | Compiler output and metadata for a given module. data CompiledModule a = CompiledModule { -- | 'ModSummary' for the module, as given by GHC. modSummary :: ModSummary, -- | String representation of the module's name, not qualified with a -- package key. -- 'ModuleName' representation can be obtained from the module's -- 'stgModSummary'. modName :: String, -- | String representation of the module's package key. -- 'PackageKey' representation can be obtained from the module's -- 'stgModSummary'. modPackageKey :: String, -- | Is this module a compilation target (as opposed to a dependency of -- one)? modIsTarget :: Bool, -- | Was the module compiler from a @hs-boot@ file? modSourceIsHsBoot :: Bool, -- | The Haskell source the module was compiled from, if any. modSourceFile :: Maybe FilePath, -- | Interface file corresponding to this module. modInterfaceFile :: FilePath, -- | Module data generated by compilation; usually bindings of some kind. modCompiledModule :: a } -- | A GHC error message. data Error = Error { -- | Where did the error occur? errorSpan :: SrcSpan, -- | Description of the error. errorMessage :: String, -- | More verbose description of the error. errorExtraInfo :: String } -- | A GHC warning. data Warning = Warning { -- | Where did the warning occur? warnSpan :: SrcSpan, -- | What was the warning about? warnMessage :: String } -- | Result of a compilation. data CompResult a = Success { -- | Result of the compilation. compResult :: [CompiledModule a], -- | Warnings that occurred during compilation. compWarnings :: [Warning], -- | Initial 'DynFlags' used by this compilation, collected from 'Config' -- data. compDynFlags :: DynFlags } | Failure { -- | Errors that occurred during compilation. compErrors :: [Error], -- | Warnings that occurred during compilation. compWarnings :: [Warning] } -- | Does the given 'CompResult' represent a successful compilation? ghcSuccess :: CompResult a -> Bool ghcSuccess (Success {}) = True ghcSuccess _ = False