Distribution.Simple.Compiler

Cabal-3.16.0.0: A framework for packaging Haskell software

Copyright | Isaac Jones 2003-2004
License | BSD3
Maintainer | cabal-devel@haskell.org
Portability | portable
Safe Haskell | None
Language | Haskell2010

Distribution.Simple.Compiler

Contents

- Haskell implementations
- Support for package databases
- Support for optimisation levels
- Support for debug info levels
- Support for language extensions
- Support for profiling detail levels

Description

This should be a much more sophisticated abstraction than it is. Currently it's just a bit of data about the compiler, like its flavour and name and version. The reason it's just data is because currently it has to be in `Read` and `Show` so it can be saved along with the `LocalBuildInfo`. The only interesting bit of info it contains is a mapping between language extensions and compiler command line flags. This module also defines a `PackageDB` type which is used to refer to package databases. Most compilers only know about a single global package collection but GHC has a global and per-user one and it lets you create arbitrary other package databases. We do not yet fully support this latter feature.

Synopsis

- module Distribution.Compiler
- data Compiler = Compiler {
  - compilerId :: CompilerId
  - compilerAbiTag :: AbiTag
  - compilerCompat :: [CompilerId]
  - compilerLanguages :: [(Language, CompilerFlag)]
  - compilerExtensions :: [(Extension, Maybe CompilerFlag)]
  - compilerProperties :: Map String String
  }
- showCompilerId :: Compiler -> String
- showCompilerIdWithAbi :: Compiler -> String
- compilerFlavor :: Compiler -> CompilerFlavor
- compilerVersion :: Compiler -> Version
- compilerCompatFlavor :: CompilerFlavor -> Compiler -> Bool
- compilerCompatVersion :: CompilerFlavor -> Compiler -> Maybe Version
- compilerInfo :: Compiler -> CompilerInfo
- type PackageDB = PackageDBX (SymbolicPath Pkg ('Dir PkgDB))
- type PackageDBStack = PackageDBStackX (SymbolicPath Pkg ('Dir PkgDB))
- type PackageDBCWD = PackageDBX FilePath
- type PackageDBStackCWD = PackageDBStackX FilePath
- data PackageDBX fp
  - = GlobalPackageDB
  - | UserPackageDB
  - | SpecificPackageDB fp
- type PackageDBStackX from = [PackageDBX from]
- type PackageDBS from = PackageDBX (SymbolicPath from ('Dir PkgDB))
- type PackageDBStackS from = PackageDBStackX (SymbolicPath from ('Dir PkgDB))
- registrationPackageDB :: PackageDBStackX from -> PackageDBX from
- absolutePackageDBPaths :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDBStack -> IO PackageDBStack
- absolutePackageDBPath :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDB -> IO PackageDB
- interpretPackageDB :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDB -> PackageDBCWD
- interpretPackageDBStack :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDBStack -> PackageDBStackCWD
- coercePackageDB :: PackageDBCWD -> PackageDBX (SymbolicPath CWD ('Dir PkgDB))
- coercePackageDBStack :: [PackageDBCWD] -> [PackageDBX (SymbolicPath CWD ('Dir PkgDB))]
- data OptimisationLevel
  - = NoOptimisation
  - | NormalOptimisation
  - | MaximumOptimisation
- flagToOptimisationLevel :: Maybe String -> OptimisationLevel
- data DebugInfoLevel
  - = NoDebugInfo
  - | MinimalDebugInfo
  - | NormalDebugInfo
  - | MaximalDebugInfo
- flagToDebugInfoLevel :: Maybe String -> DebugInfoLevel
- type CompilerFlag = String
- languageToFlags :: Compiler -> Maybe Language -> [CompilerFlag]
- unsupportedLanguages :: Compiler -> [Language] -> [Language]
- extensionsToFlags :: Compiler -> [Extension] -> [CompilerFlag]
- unsupportedExtensions :: Compiler -> [Extension] -> [Extension]
- parmakeSupported :: Compiler -> Bool
- reexportedModulesSupported :: Compiler -> Bool
- renamingPackageFlagsSupported :: Compiler -> Bool
- unifiedIPIDRequired :: Compiler -> Bool
- packageKeySupported :: Compiler -> Bool
- unitIdSupported :: Compiler -> Bool
- coverageSupported :: Compiler -> Bool
- profilingSupported :: Compiler -> Bool
- profilingDynamicSupported :: Compiler -> Maybe Bool
- profilingDynamicSupportedOrUnknown :: Compiler -> Bool
- profilingVanillaSupported :: Compiler -> Maybe Bool
- profilingVanillaSupportedOrUnknown :: Compiler -> Bool
- dynamicSupported :: Compiler -> Maybe Bool
- backpackSupported :: Compiler -> Bool
- arResponseFilesSupported :: Compiler -> Bool
- arDashLSupported :: Compiler -> Bool
- libraryDynDirSupported :: Compiler -> Bool
- libraryVisibilitySupported :: Compiler -> Bool
- jsemSupported :: Compiler -> Bool
- reexportedAsSupported :: Compiler -> Bool
- data ProfDetailLevel
  - = ProfDetailNone
  - | ProfDetailDefault
  - | ProfDetailExportedFunctions
  - | ProfDetailToplevelFunctions
  - | ProfDetailAllFunctions
  - | ProfDetailTopLate
  - | ProfDetailOther String
- knownProfDetailLevels :: [(String, [String], ProfDetailLevel)]
- flagToProfDetailLevel :: String -> ProfDetailLevel
- showProfDetailLevel :: ProfDetailLevel -> String

# Haskell implementations

module Distribution.Compiler

data Compiler Source #

Constructors

Compiler |
Fields compilerId :: CompilerId Compiler flavour and version. compilerAbiTag :: AbiTag Tag for distinguishing incompatible ABI's on the same architecture/os. compilerCompat :: [CompilerId] Other implementations that this compiler claims to be compatible with. compilerLanguages :: [(Language, CompilerFlag)] Supported language standards. compilerExtensions :: [(Extension, Maybe CompilerFlag)] Supported extensions. compilerProperties :: Map String String A key-value map for properties not covered by the above fields.

#### Instances

Instances details

Structured Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler Methods structure :: Proxy Compiler -> Structure Source # structureHash' :: Tagged Compiler MD5
Binary Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler Methods put :: Compiler -> Put # get :: Get Compiler # putList :: [Compiler] -> Put #
Eq Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler Methods (==) :: Compiler -> Compiler -> Bool # (/=) :: Compiler -> Compiler -> Bool #
Generic Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler Associated Types
type Rep Compiler |
Instance details Defined in Distribution.Simple.Compiler type Rep Compiler = D1 ('MetaData "Compiler" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) (C1 ('MetaCons "Compiler" 'PrefixI 'True) ((S1 ('MetaSel ('Just "compilerId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 CompilerId) :*: (S1 ('MetaSel ('Just "compilerAbiTag") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 AbiTag) :*: S1 ('MetaSel ('Just "compilerCompat") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [CompilerId]))) :*: (S1 ('MetaSel ('Just "compilerLanguages") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Language, CompilerFlag)]) :*: (S1 ('MetaSel ('Just "compilerExtensions") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Extension, Maybe CompilerFlag)]) :*: S1 ('MetaSel ('Just "compilerProperties") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map String String))))))
Methods from :: Compiler -> Rep Compiler x # to :: Rep Compiler x -> Compiler #
Read Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler Methods readsPrec :: Int -> ReadS Compiler # readList :: ReadS [Compiler] # readPrec :: ReadPrec Compiler # readListPrec :: ReadPrec [Compiler] #
Show Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler Methods showsPrec :: Int -> Compiler -> ShowS # show :: Compiler -> String # showList :: [Compiler] -> ShowS #
type Rep Compiler Source # |
Instance details Defined in Distribution.Simple.Compiler type Rep Compiler = D1 ('MetaData "Compiler" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) (C1 ('MetaCons "Compiler" 'PrefixI 'True) ((S1 ('MetaSel ('Just "compilerId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 CompilerId) :*: (S1 ('MetaSel ('Just "compilerAbiTag") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 AbiTag) :*: S1 ('MetaSel ('Just "compilerCompat") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [CompilerId]))) :*: (S1 ('MetaSel ('Just "compilerLanguages") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Language, CompilerFlag)]) :*: (S1 ('MetaSel ('Just "compilerExtensions") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Extension, Maybe CompilerFlag)]) :*: S1 ('MetaSel ('Just "compilerProperties") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map String String))))))

showCompilerId :: Compiler -> String Source #

showCompilerIdWithAbi :: Compiler -> String Source #

compilerFlavor :: Compiler -> CompilerFlavor Source #

compilerVersion :: Compiler -> Version Source #

compilerCompatFlavor :: CompilerFlavor -> Compiler -> Bool Source #

Is this compiler compatible with the compiler flavour we're interested in?

For example this checks if the compiler is actually GHC or is another compiler that claims to be compatible with some version of GHC, e.g. GHCJS.

    if compilerCompatFlavor GHC compiler then ... else ...

compilerCompatVersion :: CompilerFlavor -> Compiler -> Maybe Version Source #

Is this compiler compatible with the compiler flavour we're interested in, and if so what version does it claim to be compatible with.

For example this checks if the compiler is actually GHC-7.x or is another compiler that claims to be compatible with some GHC-7.x version.

    case compilerCompatVersion GHC compiler of
      Just (Version (7:_)) -> ...
      _                    -> ...

compilerInfo :: Compiler -> CompilerInfo Source #

# Support for package databases

type PackageDB = PackageDBX (SymbolicPath Pkg ('Dir PkgDB)) Source #

type PackageDBStack = PackageDBStackX (SymbolicPath Pkg ('Dir PkgDB)) Source #

type PackageDBCWD = PackageDBX FilePath Source #

type PackageDBStackCWD = PackageDBStackX FilePath Source #

data PackageDBX fp Source #

Some compilers have a notion of a database of available packages. For some there is just one global db of packages, other compilers support a per-user or an arbitrary db specified at some location in the file system. This can be used to build isolated environments of packages, for example to build a collection of related packages without installing them globally.

Abstracted over

Constructors

GlobalPackageDB |
UserPackageDB |
SpecificPackageDB fp | NB: the path might be relative or it might be absolute

#### Instances

Instances details

Functor PackageDBX Source # |
Instance details Defined in Distribution.Simple.Compiler Methods fmap :: (a -> b) -> PackageDBX a -> PackageDBX b # (<$) :: a -> PackageDBX b -> PackageDBX a #
Foldable PackageDBX Source # |
Instance details Defined in Distribution.Simple.Compiler Methods fold :: Monoid m => PackageDBX m -> m # foldMap :: Monoid m => (a -> m) -> PackageDBX a -> m # foldMap' :: Monoid m => (a -> m) -> PackageDBX a -> m # foldr :: (a -> b -> b) -> b -> PackageDBX a -> b # foldr' :: (a -> b -> b) -> b -> PackageDBX a -> b # foldl :: (b -> a -> b) -> b -> PackageDBX a -> b # foldl' :: (b -> a -> b) -> b -> PackageDBX a -> b # foldr1 :: (a -> a -> a) -> PackageDBX a -> a # foldl1 :: (a -> a -> a) -> PackageDBX a -> a # toList :: PackageDBX a -> [a] # null :: PackageDBX a -> Bool # length :: PackageDBX a -> Int # elem :: Eq a => a -> PackageDBX a -> Bool # maximum :: Ord a => PackageDBX a -> a # minimum :: Ord a => PackageDBX a -> a # sum :: Num a => PackageDBX a -> a # product :: Num a => PackageDBX a -> a #
Traversable PackageDBX Source # |
Instance details Defined in Distribution.Simple.Compiler Methods traverse :: Applicative f => (a -> f b) -> PackageDBX a -> f (PackageDBX b) # sequenceA :: Applicative f => PackageDBX (f a) -> f (PackageDBX a) # mapM :: Monad m => (a -> m b) -> PackageDBX a -> m (PackageDBX b) # sequence :: Monad m => PackageDBX (m a) -> m (PackageDBX a) #
Structured fp => Structured (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Methods structure :: Proxy (PackageDBX fp) -> Structure Source # structureHash' :: Tagged (PackageDBX fp) MD5
Binary fp => Binary (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Methods put :: PackageDBX fp -> Put # get :: Get (PackageDBX fp) # putList :: [PackageDBX fp] -> Put #
Eq fp => Eq (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Methods (==) :: PackageDBX fp -> PackageDBX fp -> Bool # (/=) :: PackageDBX fp -> PackageDBX fp -> Bool #
Ord fp => Ord (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Methods compare :: PackageDBX fp -> PackageDBX fp -> Ordering # (<) :: PackageDBX fp -> PackageDBX fp -> Bool # (<=) :: PackageDBX fp -> PackageDBX fp -> Bool # (>) :: PackageDBX fp -> PackageDBX fp -> Bool # (>=) :: PackageDBX fp -> PackageDBX fp -> Bool # max :: PackageDBX fp -> PackageDBX fp -> PackageDBX fp # min :: PackageDBX fp -> PackageDBX fp -> PackageDBX fp #
Generic (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Associated Types
type Rep (PackageDBX fp) |
Instance details Defined in Distribution.Simple.Compiler type Rep (PackageDBX fp) = D1 ('MetaData "PackageDBX" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) (C1 ('MetaCons "GlobalPackageDB" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "UserPackageDB" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "SpecificPackageDB" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 fp))))
Methods from :: PackageDBX fp -> Rep (PackageDBX fp) x # to :: Rep (PackageDBX fp) x -> PackageDBX fp #
Read fp => Read (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Methods readsPrec :: Int -> ReadS (PackageDBX fp) # readList :: ReadS [PackageDBX fp] # readPrec :: ReadPrec (PackageDBX fp) # readListPrec :: ReadPrec [PackageDBX fp] #
Show fp => Show (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler Methods showsPrec :: Int -> PackageDBX fp -> ShowS # show :: PackageDBX fp -> String # showList :: [PackageDBX fp] -> ShowS #
type Rep (PackageDBX fp) Source # |
Instance details Defined in Distribution.Simple.Compiler type Rep (PackageDBX fp) = D1 ('MetaData "PackageDBX" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) (C1 ('MetaCons "GlobalPackageDB" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "UserPackageDB" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "SpecificPackageDB" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 fp))))

type PackageDBStackX from = [PackageDBX from] Source #

We typically get packages from several databases, and stack them together. This type lets us be explicit about that stacking. For example typical stacks include:

    [GlobalPackageDB]
    [GlobalPackageDB, UserPackageDB]
    [GlobalPackageDB, SpecificPackageDB "package.conf.inplace"]

Note that the `GlobalPackageDB` is invariably at the bottom since it contains the rts, base and other special compiler-specific packages.

We are not restricted to using just the above combinations. In particular we can use several custom package dbs and the user package db together.

When it comes to writing, the top most (last) package is used.

type PackageDBS from = PackageDBX (SymbolicPath from ('Dir PkgDB)) Source #

type PackageDBStackS from = PackageDBStackX (SymbolicPath from ('Dir PkgDB)) Source #

registrationPackageDB :: PackageDBStackX from -> PackageDBX from Source #

Return the package that we should register into. This is the package db at the top of the stack.

absolutePackageDBPaths :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDBStack -> IO PackageDBStack Source #

Make package paths absolute

absolutePackageDBPath :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDB -> IO PackageDB Source #

interpretPackageDB :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDB -> PackageDBCWD Source #

interpretPackageDBStack :: Maybe (SymbolicPath CWD ('Dir Pkg)) -> PackageDBStack -> PackageDBStackCWD Source #

coercePackageDB :: PackageDBCWD -> PackageDBX (SymbolicPath CWD ('Dir PkgDB)) Source #

Transform a package db using a FilePath into one using symbolic paths.

coercePackageDBStack :: [PackageDBCWD] -> [PackageDBX (SymbolicPath CWD ('Dir PkgDB))] Source #

# Support for optimisation levels

data OptimisationLevel Source #

Some compilers support optimising. Some have different levels. For compilers that do not the level is just capped to the level they do support.

Constructors

NoOptimisation |
NormalOptimisation |
MaximumOptimisation |

#### Instances

Instances details

Structured OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods structure :: Proxy OptimisationLevel -> Structure Source # structureHash' :: Tagged OptimisationLevel MD5
Binary OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods put :: OptimisationLevel -> Put # get :: Get OptimisationLevel # putList :: [OptimisationLevel] -> Put #
Eq OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods (==) :: OptimisationLevel -> OptimisationLevel -> Bool # (/=) :: OptimisationLevel -> OptimisationLevel -> Bool #
Bounded OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods minBound :: OptimisationLevel # maxBound :: OptimisationLevel #
Enum OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods succ :: OptimisationLevel -> OptimisationLevel # pred :: OptimisationLevel -> OptimisationLevel # toEnum :: Int -> OptimisationLevel # fromEnum :: OptimisationLevel -> Int # enumFrom :: OptimisationLevel -> [OptimisationLevel] # enumFromThen :: OptimisationLevel -> OptimisationLevel -> [OptimisationLevel] # enumFromTo :: OptimisationLevel -> OptimisationLevel -> [OptimisationLevel] # enumFromThenTo :: OptimisationLevel -> OptimisationLevel -> OptimisationLevel -> [OptimisationLevel] #
Generic OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Associated Types
type Rep OptimisationLevel |
Instance details Defined in Distribution.Simple.Compiler type Rep OptimisationLevel = D1 ('MetaData "OptimisationLevel" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) (C1 ('MetaCons "NoOptimisation" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NormalOptimisation" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MaximumOptimisation" 'PrefixI 'False) (U1 :: Type -> Type)))
Methods from :: OptimisationLevel -> Rep OptimisationLevel x # to :: Rep OptimisationLevel x -> OptimisationLevel #
Read OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods readsPrec :: Int -> ReadS OptimisationLevel # readList :: ReadS [OptimisationLevel] # readPrec :: ReadPrec OptimisationLevel # readListPrec :: ReadPrec [OptimisationLevel] #
Show OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods showsPrec :: Int -> OptimisationLevel -> ShowS # show :: OptimisationLevel -> String # showList :: [OptimisationLevel] -> ShowS #
type Rep OptimisationLevel Source # |
Instance details Defined in Distribution.Simple.Compiler type Rep OptimisationLevel = D1 ('MetaData "OptimisationLevel" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) (C1 ('MetaCons "NoOptimisation" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NormalOptimisation" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MaximumOptimisation" 'PrefixI 'False) (U1 :: Type -> Type)))

flagToOptimisationLevel :: Maybe String -> OptimisationLevel Source #

# Support for debug info levels

data DebugInfoLevel Source #

Some compilers support emitting debug info. Some have different levels. For compilers that do not the level is just capped to the level they do support.

Constructors

NoDebugInfo |
MinimalDebugInfo |
NormalDebugInfo |
MaximalDebugInfo |

#### Instances

Instances details

Structured DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods structure :: Proxy DebugInfoLevel -> Structure Source # structureHash' :: Tagged DebugInfoLevel MD5
Binary DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods put :: DebugInfoLevel -> Put # get :: Get DebugInfoLevel # putList :: [DebugInfoLevel] -> Put #
Eq DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods (==) :: DebugInfoLevel -> DebugInfoLevel -> Bool # (/=) :: DebugInfoLevel -> DebugInfoLevel -> Bool #
Bounded DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods minBound :: DebugInfoLevel # maxBound :: DebugInfoLevel #
Enum DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods succ :: DebugInfoLevel -> DebugInfoLevel # pred :: DebugInfoLevel -> DebugInfoLevel # toEnum :: Int -> DebugInfoLevel # fromEnum :: DebugInfoLevel -> Int # enumFrom :: DebugInfoLevel -> [DebugInfoLevel] # enumFromThen :: DebugInfoLevel -> DebugInfoLevel -> [DebugInfoLevel] # enumFromTo :: DebugInfoLevel -> DebugInfoLevel -> [DebugInfoLevel] # enumFromThenTo :: DebugInfoLevel -> DebugInfoLevel -> DebugInfoLevel -> [DebugInfoLevel] #
Generic DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Associated Types
type Rep DebugInfoLevel |
Instance details Defined in Distribution.Simple.Compiler type Rep DebugInfoLevel = D1 ('MetaData "DebugInfoLevel" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) ((C1 ('MetaCons "NoDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MinimalDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "NormalDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MaximalDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type)))
Methods from :: DebugInfoLevel -> Rep DebugInfoLevel x # to :: Rep DebugInfoLevel x -> DebugInfoLevel #
Read DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods readsPrec :: Int -> ReadS DebugInfoLevel # readList :: ReadS [DebugInfoLevel] # readPrec :: ReadPrec DebugInfoLevel # readListPrec :: ReadPrec [DebugInfoLevel] #
Show DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods showsPrec :: Int -> DebugInfoLevel -> ShowS # show :: DebugInfoLevel -> String # showList :: [DebugInfoLevel] -> ShowS #
type Rep DebugInfoLevel Source # |
Instance details Defined in Distribution.Simple.Compiler type Rep DebugInfoLevel = D1 ('MetaData "DebugInfoLevel" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) ((C1 ('MetaCons "NoDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MinimalDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "NormalDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MaximalDebugInfo" 'PrefixI 'False) (U1 :: Type -> Type)))

flagToDebugInfoLevel :: Maybe String -> DebugInfoLevel Source #

# Support for language extensions

type CompilerFlag = String Source #

languageToFlags :: Compiler -> Maybe Language -> [CompilerFlag] Source #

unsupportedLanguages :: Compiler -> [Language] -> [Language] Source #

extensionsToFlags :: Compiler -> [Extension] -> [CompilerFlag] Source #

For the given compiler, return the flags for the supported extensions.

unsupportedExtensions :: Compiler -> [Extension] -> [Extension] Source #

For the given compiler, return the extensions it does not support.

parmakeSupported :: Compiler -> Bool Source #

Does this compiler support parallel --make mode?

reexportedModulesSupported :: Compiler -> Bool Source #

Does this compiler support reexported-modules?

renamingPackageFlagsSupported :: Compiler -> Bool Source #

Does this compiler support thinning/renaming on package flags?

unifiedIPIDRequired :: Compiler -> Bool Source #

Does this compiler have unified IPIDs (so no package keys)

packageKeySupported :: Compiler -> Bool Source #

Does this compiler support package keys?

unitIdSupported :: Compiler -> Bool Source #

Does this compiler support unit IDs?

coverageSupported :: Compiler -> Bool Source #

Does this compiler support Haskell program coverage?

profilingSupported :: Compiler -> Bool Source #

Does this compiler support profiling?

profilingDynamicSupported :: Compiler -> Maybe Bool Source #

Is the compiler distributed with profiling dynamic libraries

profilingDynamicSupportedOrUnknown :: Compiler -> Bool Source #

Either profiling dynamic is definitely supported or we don't know (so assume it is)

profilingVanillaSupported :: Compiler -> Maybe Bool Source #

Is the compiler distributed with profiling libraries

profilingVanillaSupportedOrUnknown :: Compiler -> Bool Source #

Either profiling is definitely supported or we don't know (so assume it is)

dynamicSupported :: Compiler -> Maybe Bool Source #

Is the compiler distributed with dynamic libraries

backpackSupported :: Compiler -> Bool Source #

Does this compiler support Backpack?

arResponseFilesSupported :: Compiler -> Bool Source #

Does this compiler's "ar" command supports response file arguments (i.e. @file-style arguments).

arDashLSupported :: Compiler -> Bool Source #

Does this compiler's "ar" command support llvm-ar's -L flag, which compels the archiver to add an input archive's members rather than adding the archive itself.

libraryDynDirSupported :: Compiler -> Bool Source #

Does this compiler support a package database entry with: "dynamic-library-dirs"?

libraryVisibilitySupported :: Compiler -> Bool Source #

Does this compiler support a package database entry with: "visibility"?

jsemSupported :: Compiler -> Bool Source #

Does this compiler support the -jsem option?

reexportedAsSupported :: Compiler -> Bool Source #

Does the compiler support the -reexported-modules "A as B" syntax

# Support for profiling detail levels

data ProfDetailLevel Source #

Some compilers (notably GHC) support profiling and can instrument programs so the system can account costs to different functions. There are different levels of detail that can be used for this accounting. For compilers that do not support this notion or the particular detail levels, this is either ignored or just capped to some similar level they do support.

Constructors

ProfDetailNone |
ProfDetailDefault |
ProfDetailExportedFunctions |
ProfDetailToplevelFunctions |
ProfDetailAllFunctions |
ProfDetailTopLate |
ProfDetailOther String |

#### Instances

Instances details

Structured ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods structure :: Proxy ProfDetailLevel -> Structure Source # structureHash' :: Tagged ProfDetailLevel MD5
Binary ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods put :: ProfDetailLevel -> Put # get :: Get ProfDetailLevel # putList :: [ProfDetailLevel] -> Put #
Eq ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods (==) :: ProfDetailLevel -> ProfDetailLevel -> Bool # (/=) :: ProfDetailLevel -> ProfDetailLevel -> Bool #
Generic ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Associated Types
type Rep ProfDetailLevel |
Instance details Defined in Distribution.Simple.Compiler type Rep ProfDetailLevel = D1 ('MetaData "ProfDetailLevel" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) ((C1 ('MetaCons "ProfDetailNone" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ProfDetailDefault" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ProfDetailExportedFunctions" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "ProfDetailToplevelFunctions" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ProfDetailAllFunctions" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ProfDetailTopLate" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ProfDetailOther" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))))
Methods from :: ProfDetailLevel -> Rep ProfDetailLevel x # to :: Rep ProfDetailLevel x -> ProfDetailLevel #
Read ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods readsPrec :: Int -> ReadS ProfDetailLevel # readList :: ReadS [ProfDetailLevel] # readPrec :: ReadPrec ProfDetailLevel # readListPrec :: ReadPrec [ProfDetailLevel] #
Show ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler Methods showsPrec :: Int -> ProfDetailLevel -> ShowS # show :: ProfDetailLevel -> String # showList :: [ProfDetailLevel] -> ShowS #
type Rep ProfDetailLevel Source # |
Instance details Defined in Distribution.Simple.Compiler type Rep ProfDetailLevel = D1 ('MetaData "ProfDetailLevel" "Distribution.Simple.Compiler" "Cabal-3.16.0.0-558c" 'False) ((C1 ('MetaCons "ProfDetailNone" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ProfDetailDefault" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ProfDetailExportedFunctions" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "ProfDetailToplevelFunctions" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ProfDetailAllFunctions" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ProfDetailTopLate" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ProfDetailOther" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))))

knownProfDetailLevels :: [(String, [String], ProfDetailLevel)] Source #

flagToProfDetailLevel :: String -> ProfDetailLevel Source #

showProfDetailLevel :: ProfDetailLevel -> String Source #