on 3199abe help sign in
stackage/Stackage/Types.hs
72 lines 2.7 kB history raw
1module Stackage.Types
2 ( module X
3 , module Stackage.Types
4 ) where
6import Data.Map as X (Map)
7import Data.Map (unionWith)
8import Data.Monoid (Monoid (..))
9import Data.Set as X (Set)
10import Data.Version as X (Version)
11import Distribution.Package as X (PackageIdentifier (..),
12 PackageName (..))
13import Distribution.Version as X (VersionRange (..))
15newtype PackageDB = PackageDB (Map PackageName PackageInfo)
16 deriving (Show, Eq, Ord)
18instance Monoid PackageDB where
19 mempty = PackageDB mempty
20 PackageDB x `mappend` PackageDB y =
21 PackageDB $ unionWith newest x y
22 where
23 newest pi1 pi2
24 | piVersion pi1 > piVersion pi2 = pi1
25 | otherwise = pi2
27data PackageInfo = PackageInfo
28 { piVersion :: Version
29 , piDeps :: Set PackageName
30 , piHasTests :: Bool
31 , piBuildTools :: Set PackageName
32 }
33 deriving (Show, Eq, Ord)
35data HaskellPlatform = HaskellPlatform
36 { hpcore :: Set PackageIdentifier
37 , hplibs :: Set PackageIdentifier
38 }
39 deriving (Show, Eq, Ord)
40instance Monoid HaskellPlatform where
41 mempty = HaskellPlatform mempty mempty
42 HaskellPlatform a x `mappend` HaskellPlatform b y = HaskellPlatform (mappend a b) (mappend x y)
44data InstallInfo = InstallInfo
45 { iiCore :: Set PackageName
46 , iiPackages :: Map PackageName (Version, Maintainer)
47 , iiOptionalCore :: Map PackageName Version
48 -- ^ This is intended to hold onto packages which might be automatically
49 -- provided in the global package database. In practice, this would be
50 -- Haskell Platform packages provided by distributions.
51 , iiPackageDB :: PackageDB
52 }
54-- | Email address of a Stackage maintainer.
55newtype Maintainer = Maintainer { unMaintainer :: String }
56 deriving (Show, Eq, Ord)
58data BuildSettings = BuildSettings
59 { sandboxRoot :: FilePath
60 , extraBuildArgs :: [String]
61 , extraCore :: Set PackageName
62 , expectedFailures :: Set PackageName
63 , stablePackages :: Map PackageName (VersionRange, Maintainer)
64 , extraArgs :: [String]
65 , haskellPlatformCabal :: FilePath
66 , requireHaskellPlatform :: Bool
67 , cleanBeforeBuild :: Bool
68 , excludedPackages :: Set PackageName
69 -- ^ Packages which should be dropped from the list of stable packages,
70 -- even if present via the Haskell Platform or @stablePackages@. If these
71 -- packages are dependencies of others, they will still be included.
72 }