Cabal-1.8.0.4: A framework for packaging Haskell softwareSource codeContentsIndex
Distribution.Simple.Compiler
Portabilityportable
Maintainercabal-devel@haskell.org
Contents
Haskell implementations
Support for package databases
Support for optimisation levels
Support for language extensions
Description
This should be a much more sophisticated abstraction than it is. Currently it's just a bit of data about the compiler, like it's 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
compilerExtensions :: [(Extension, String)]
}
showCompilerId :: Compiler -> String
compilerFlavor :: Compiler -> CompilerFlavor
compilerVersion :: Compiler -> Version
data PackageDB
= GlobalPackageDB
| UserPackageDB
| SpecificPackageDB FilePath
type PackageDBStack = [PackageDB]
registrationPackageDB :: PackageDBStack -> PackageDB
data OptimisationLevel
= NoOptimisation
| NormalOptimisation
| MaximumOptimisation
flagToOptimisationLevel :: Maybe String -> OptimisationLevel
type Flag = String
extensionsToFlags :: Compiler -> [Extension] -> [Flag]
unsupportedExtensions :: Compiler -> [Extension] -> [Extension]
Haskell implementations
module Distribution.Compiler
data Compiler Source
Constructors
Compiler
compilerId :: CompilerId
compilerExtensions :: [(Extension, String)]
show/hide Instances
showCompilerId :: Compiler -> StringSource
compilerFlavor :: Compiler -> CompilerFlavorSource
compilerVersion :: Compiler -> VersionSource
Support for package databases
data PackageDB 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 isloated environments of packages, for example to build a collection of related packages without installing them globally.
Constructors
GlobalPackageDB
UserPackageDB
SpecificPackageDB FilePath
show/hide Instances
type PackageDBStack = [PackageDB]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.

registrationPackageDB :: PackageDBStack -> PackageDBSource
Return the package that we should register into. This is the package db at the top of the stack.
Support for optimisation levels
data OptimisationLevel Source
Some compilers support optimising. Some have different levels. For compliers that do not the level is just capped to the level they do support.
Constructors
NoOptimisation
NormalOptimisation
MaximumOptimisation
show/hide Instances
flagToOptimisationLevel :: Maybe String -> OptimisationLevelSource
Support for language extensions
type Flag = StringSource
extensionsToFlags :: Compiler -> [Extension] -> [Flag]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.
Produced by Haddock version 2.6.1