Drop append, simplify
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Sun, 6 Aug 2017 23:25:42 +0000 (00:25 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Sun, 6 Aug 2017 23:25:42 +0000 (00:25 +0100)
26 files changed:
src/Expression.hs
src/Hadrian/Expression.hs
src/Rules/Libffi.hs
src/Settings/Builders/Ar.hs
src/Settings/Builders/Cc.hs
src/Settings/Builders/Common.hs
src/Settings/Builders/Configure.hs
src/Settings/Builders/DeriveConstants.hs
src/Settings/Builders/Ghc.hs
src/Settings/Builders/GhcCabal.hs
src/Settings/Builders/Haddock.hs
src/Settings/Builders/Hsc2Hs.hs
src/Settings/Builders/Ld.hs
src/Settings/Builders/Make.hs
src/Settings/Default.hs
src/Settings/Flavours/Development.hs
src/Settings/Flavours/Performance.hs
src/Settings/Flavours/Profiled.hs
src/Settings/Flavours/Quick.hs
src/Settings/Flavours/Quickest.hs
src/Settings/Packages/Cabal.hs
src/Settings/Packages/Compiler.hs
src/Settings/Packages/GhcCabal.hs
src/Settings/Packages/Haddock.hs
src/Settings/Packages/Rts.hs
src/Settings/Packages/RunGhc.hs

index 0442c23..b125685 100644 (file)
@@ -3,7 +3,7 @@ module Expression (
     Expr, Predicate, Args, Ways, Packages,
 
     -- ** Construction and modification
-    expr, exprIO, append, arg, remove,
+    expr, exprIO, arg, remove,
 
     -- ** Predicates
     (?), stage, stage0, stage1, stage2, notStage0, package, notPackage,
@@ -17,7 +17,7 @@ module Expression (
 
     -- * Convenient accessors
     getContext, getStage, getPackage, getBuilder, getOutputs, getInputs, getWay,
-    getInput, getOutput, getSetting, getSettingList, getFlag,
+    getInput, getOutput, getSetting, getSettingList, getStagedSettingList, getFlag,
 
     -- * Re-exports
     module Data.Semigroup,
@@ -57,16 +57,15 @@ type Ways      = Expr [Way]
 
 -- Basic operations on expressions:
 
--- | Append something to an expression.
-append :: a -> Expr a
-append = pure
-
 getSetting :: Setting -> Expr String
 getSetting = expr . setting
 
 getSettingList :: SettingList -> Expr [String]
 getSettingList = expr . settingList
 
+getStagedSettingList :: (Stage -> SettingList) -> Expr [String]
+getStagedSettingList f = getSettingList . f =<< getStage
+
 getFlag :: Flag -> Predicate
 getFlag = expr . flag
 
@@ -105,4 +104,3 @@ notPackage = notM . package
 -- | Is a library package currently being built?
 libraryPackage :: Predicate
 libraryPackage = isLibrary <$> getPackage
-
index 4022f02..3ab8756 100644 (file)
@@ -140,4 +140,4 @@ output f = any (f ?==) <$> getOutputs
 
 -- | Does any of the output files match any of the given patterns?
 outputs :: [FilePattern] -> Predicate c b
-outputs = anyM output
\ No newline at end of file
+outputs = anyM output
index bd835af..7b9e071 100644 (file)
@@ -28,7 +28,7 @@ configureEnvironment :: Action [CmdOption]
 configureEnvironment = do
     cFlags  <- interpretInContext libffiContext $ mconcat
                [ cArgs
-               , argStagedSettingList ConfCcArgs ]
+               , getStagedSettingList ConfCcArgs ]
     ldFlags <- interpretInContext libffiContext ldArgs
     sequence [ builderEnvironment "CC" $ Cc CompileC Stage1
              , builderEnvironment "CXX" $ Cc CompileC Stage1
index b7b93f1..e597538 100644 (file)
@@ -5,7 +5,7 @@ import Settings.Builders.Common
 arBuilderArgs :: Args
 arBuilderArgs = builder Ar ? mconcat [ arg "q"
                                      , arg =<< getOutput
-                                     , append =<< getInputs ]
+                                     , getInputs ]
 
 -- This count includes arg "q" and arg file parameters in arBuilderArgs.
 -- Update this value appropriately when changing arBuilderArgs.
index f980834..7dc4423 100644 (file)
@@ -6,13 +6,13 @@ ccBuilderArgs :: Args
 ccBuilderArgs = do
   way <- getWay
   builder Cc ? mconcat
-    [ append =<< getPkgDataList CcArgs
-    , getSettingList . ConfCcArgs =<< getStage
+    [ getPkgDataList CcArgs
+    , getStagedSettingList ConfCcArgs
     , cIncludeArgs
 
     , builder (Cc CompileC) ? mconcat
         [ arg "-Werror"
-        , Dynamic `wayUnit` way ? append [ "-fPIC", "-DDYNAMIC" ]
+        , Dynamic `wayUnit` way ? pure [ "-fPIC", "-DDYNAMIC" ]
         -- ref: mk/warning.mk:
         --  SRC_CC_OPTS     += -Wall $(WERROR)
         , arg "-c", arg =<< getInput
index eaa49d0..eb9b046 100644 (file)
@@ -8,8 +8,7 @@ module Settings.Builders.Common (
     module Settings,
     module Settings.Path,
     module UserSettings,
-    cIncludeArgs, ldArgs, cArgs, cWarnings, argStagedBuilderPath,
-    argStagedSettingList, bootPackageDatabaseArgs
+    cIncludeArgs, ldArgs, cArgs, cWarnings, bootPackageDatabaseArgs
     ) where
 
 import Base
@@ -31,8 +30,8 @@ cIncludeArgs = do
     mconcat [ arg "-Iincludes"
             , arg $ "-I" ++ generatedPath
             , arg $ "-I" ++ path
-            , append [ "-I" ++ pkgPath pkg -/- dir | dir <- incDirs ]
-            , append [ "-I" ++       unifyPath dir | dir <- depDirs ] ]
+            , pure [ "-I" ++ pkgPath pkg -/- dir | dir <- incDirs ]
+            , pure [ "-I" ++       unifyPath dir | dir <- depDirs ] ]
 
 ldArgs :: Args
 ldArgs = mempty
@@ -49,18 +48,6 @@ cWarnings = do
             , gccGe46 ? notM windowsHost ? arg "-Werror=unused-but-set-variable"
             , gccGe46 ? arg "-Wno-error=inline" ]
 
-argSettingList :: SettingList -> Args
-argSettingList = (append =<<) . getSettingList
-
-argStagedSettingList :: (Stage -> SettingList) -> Args
-argStagedSettingList ss = argSettingList . ss =<< getStage
-
-argStagedBuilderPath :: (Stage -> Builder) -> Args
-argStagedBuilderPath sb = do
-    stage <- getStage
-    path <- expr $ builderPath (sb stage)
-    arg path
-
 bootPackageDatabaseArgs :: Args
 bootPackageDatabaseArgs = do
     stage <- getStage
index d3314c8..40a3657 100644 (file)
@@ -7,15 +7,15 @@ configureBuilderArgs = mconcat
     [ builder (Configure gmpBuildPath) ? do
         hostPlatform  <- getSetting HostPlatform
         buildPlatform <- getSetting BuildPlatform
-        append [ "--enable-shared=no"
-               , "--host=" ++ hostPlatform
-               , "--build=" ++ buildPlatform ]
+        pure [ "--enable-shared=no"
+             , "--host=" ++ hostPlatform
+             , "--build=" ++ buildPlatform ]
 
     , builder (Configure libffiBuildPath) ? do
         top            <- expr topDirectory
         targetPlatform <- getSetting TargetPlatform
-        append [ "--prefix=" ++ top -/- libffiBuildPath -/- "inst"
-               , "--libdir=" ++ top -/- libffiBuildPath -/- "inst/lib"
-               , "--enable-static=yes"
-               , "--enable-shared=no" -- TODO: add support for yes
-               , "--host=" ++ targetPlatform ] ]
+        pure [ "--prefix=" ++ top -/- libffiBuildPath -/- "inst"
+             , "--libdir=" ++ top -/- libffiBuildPath -/- "inst/lib"
+             , "--enable-static=yes"
+             , "--enable-shared=no" -- TODO: add support for yes
+             , "--host=" ++ targetPlatform ] ]
index 8a660ae..2933793 100644 (file)
@@ -16,11 +16,11 @@ deriveConstantsBuilderArgs = builder DeriveConstants ? do
         , arg "-o", arg outputFile
         , arg "--tmpdir", arg tempDir
         , arg "--gcc-program", arg =<< getBuilderPath (Cc CompileC Stage1)
-        , append $ concatMap (\a -> ["--gcc-flag", a]) cFlags
+        , pure $ concatMap (\a -> ["--gcc-flag", a]) cFlags
         , arg "--nm-program", arg =<< getBuilderPath Nm
         , isSpecified Objdump ? mconcat [ arg "--objdump-program"
                                         , arg =<< getBuilderPath Objdump ]
-        , arg "--target-os", return <$> getSetting TargetOs ]
+        , arg "--target-os", arg =<< getSetting TargetOs ]
 
 includeCcArgs :: Args
 includeCcArgs = mconcat
index b7d5d70..03b4421 100644 (file)
@@ -15,25 +15,25 @@ ghcBuilderArgs = (builder (Ghc CompileHs) ||^ builder (Ghc LinkHs)) ? do
             , splitObjectsArgs
             , ghcLinkArgs
             , builder (Ghc CompileHs) ? arg "-c"
-            , append =<< getInputs
+            , getInputs
             , arg "-o", arg =<< getOutput ]
 
 ghcCbuilderArgs :: Args
 ghcCbuilderArgs =
   builder (Ghc CompileCWithGhc) ? do
     way <- getWay
-    let ccArgs = [ append =<< getPkgDataList CcArgs
-                 , getSettingList . ConfCcArgs =<< getStage
+    let ccArgs = [ getPkgDataList CcArgs
+                 , getStagedSettingList ConfCcArgs
                  , cIncludeArgs
                  , arg "-Werror"
-                 , Dynamic `wayUnit` way ? append [ "-fPIC", "-DDYNAMIC" ] ]
+                 , Dynamic `wayUnit` way ? pure [ "-fPIC", "-DDYNAMIC" ] ]
 
     mconcat [ arg "-Wall"
             , ghcLinkArgs
             , commonGhcArgs
             , mconcat (map (map ("-optc" ++) <$>) ccArgs)
             , arg "-c"
-            , append =<< getInputs
+            , getInputs
             , arg "-o"
             , arg =<< getOutput ]
 
@@ -51,12 +51,12 @@ ghcLinkArgs = builder (Ghc LinkHs) ? do
                    return $ concatMap (words . strip) buildInfo
                else return []
     mconcat [ (Dynamic `wayUnit` way) ?
-              append [ "-shared", "-dynamic", "-dynload", "deploy" ]
+              pure [ "-shared", "-dynamic", "-dynload", "deploy" ]
             , arg "-no-auto-link-packages"
             ,      nonHsMainPackage pkg  ? arg "-no-hs-main"
             , not (nonHsMainPackage pkg) ? arg "-rtsopts"
-            , append [ "-optl-l" ++           lib | lib <- libs ++ gmpLibs ]
-            , append [ "-optl-L" ++ unifyPath dir | dir <- libDirs ] ]
+            , pure [ "-optl-l" ++           lib | lib <- libs ++ gmpLibs ]
+            , pure [ "-optl-L" ++ unifyPath dir | dir <- libDirs ] ]
 
 needTouchy :: Expr ()
 needTouchy = notStage0 ? do
@@ -75,29 +75,26 @@ ghcMBuilderArgs = builder (Ghc FindHsDependencies) ? do
             , commonGhcArgs
             , arg "-include-pkg-deps"
             , arg "-dep-makefile", arg =<< getOutput
-            , append $ concat [ ["-dep-suffix", wayPrefix w] | w <- ways ]
-            , append =<< getInputs ]
+            , pure $ concat [ ["-dep-suffix", wayPrefix w] | w <- ways ]
+            , getInputs ]
 
 haddockGhcArgs :: Args
-haddockGhcArgs = mconcat [ commonGhcArgs, append =<< getPkgDataList HsArgs ]
+haddockGhcArgs = mconcat [ commonGhcArgs, getPkgDataList HsArgs ]
 
 -- This is included into ghcBuilderArgs, ghcMBuilderArgs and haddockGhcArgs.
 commonGhcArgs :: Args
 commonGhcArgs = do
     way     <- getWay
     path    <- getBuildPath
-    confCc  <- getSettingList . ConfCcArgs =<< getStage
-    confCpp <- getSettingList . ConfCppArgs =<< getStage
-    cppArgs <- getPkgDataList CppArgs
     mconcat [ arg "-hisuf", arg $ hisuf way
             , arg "-osuf" , arg $  osuf way
             , arg "-hcsuf", arg $ hcsuf way
             , wayGhcArgs
             , packageGhcArgs
             , includeGhcArgs
-            , append $ map ("-optc" ++) confCc
-            , append $ map ("-optP" ++) confCpp
-            , append $ map ("-optP" ++) cppArgs
+            , map ("-optc" ++) <$> getStagedSettingList ConfCcArgs
+            , map ("-optP" ++) <$> getStagedSettingList ConfCppArgs
+            , map ("-optP" ++) <$> getPkgDataList CppArgs
             , arg "-odir"    , arg path
             , arg "-hidir"   , arg path
             , arg "-stubdir" , arg path ]
@@ -107,20 +104,19 @@ wayGhcArgs :: Args
 wayGhcArgs = do
     way <- getWay
     mconcat [ if (Dynamic `wayUnit` way)
-              then append ["-fPIC", "-dynamic"]
+              then pure ["-fPIC", "-dynamic"]
               else arg "-static"
             , (Threaded  `wayUnit` way) ? arg "-optc-DTHREADED_RTS"
             , (Debug     `wayUnit` way) ? arg "-optc-DDEBUG"
             , (Profiling `wayUnit` way) ? arg "-prof"
             , (Logging   `wayUnit` way) ? arg "-eventlog"
             , (way == debug || way == debugDynamic) ?
-              append ["-ticky", "-DTICKY_TICKY"] ]
+              pure ["-ticky", "-DTICKY_TICKY"] ]
 
+-- FIXME: Get rid of to-be-deprecated -this-package-key.
 packageGhcArgs :: Args
 packageGhcArgs = do
     compId    <- getPkgData ComponentId
-    pkgDepIds <- getPkgDataList DepIds
-    -- FIXME: Get rid of to-be-deprecated -this-package-key.
     thisArg <- do
         not0 <- notStage0
         unit <- getFlag SupportsThisUnitId
@@ -129,7 +125,7 @@ packageGhcArgs = do
             , arg "-no-user-package-db"
             , bootPackageDatabaseArgs
             , libraryPackage ? arg (thisArg ++ compId)
-            , append $ map ("-package-id " ++) pkgDepIds ]
+            , map ("-package-id " ++) <$> getPkgDataList DepIds ]
 
 includeGhcArgs :: Args
 includeGhcArgs = do
@@ -140,10 +136,10 @@ includeGhcArgs = do
     mconcat [ arg "-i"
             , arg $ "-i" ++ path
             , arg $ "-i" ++ autogenPath context
-            , append [ "-i" ++ pkgPath pkg -/- dir | dir <- srcDirs ]
+            , pure [ "-i" ++ pkgPath pkg -/- dir | dir <- srcDirs ]
             , cIncludeArgs
             , arg $      "-I" ++ generatedPath
             , arg $ "-optc-I" ++ generatedPath
             , (not $ nonCabalContext context) ?
-              append [ "-optP-include"
-                     , "-optP" ++ autogenPath context -/- "cabal_macros.h" ] ]
+              pure [ "-optP-include"
+                   , "-optP" ++ autogenPath context -/- "cabal_macros.h" ] ]
index 9b54fbe..74de638 100644 (file)
@@ -29,7 +29,7 @@ ghcCabalBuilderArgs = builder GhcCabal ? do
             , withStaged Ar
             , with Alex
             , with Happy
-            , verbosity < Chatty ? append [ "-v0", "--configure-option=--quiet"
+            , verbosity < Chatty ? pure [ "-v0", "--configure-option=--quiet"
                 , "--configure-option=--disable-option-checking"  ] ]
 
 ghcCabalHsColourBuilderArgs :: Args
@@ -37,7 +37,7 @@ ghcCabalHsColourBuilderArgs = builder GhcCabalHsColour ? do
     path    <- getPackagePath
     top     <- expr topDirectory
     context <- getContext
-    append [ "hscolour", path, top -/- buildPath context ]
+    pure [ "hscolour", path, top -/- buildPath context ]
 
 -- TODO: Isn't vanilla always built? If yes, some conditions are redundant.
 -- TODO: Need compiler_stage1_CONFIGURE_OPTS += --disable-library-for-ghci?
@@ -45,18 +45,18 @@ libraryArgs :: Args
 libraryArgs = do
     ways     <- getLibraryWays
     withGhci <- expr ghcWithInterpreter
-    append [ if vanilla `elem` ways
-             then  "--enable-library-vanilla"
-             else "--disable-library-vanilla"
-           , if vanilla `elem` ways && withGhci && not (dynamicGhcPrograms flavour)
-             then  "--enable-library-for-ghci"
-             else "--disable-library-for-ghci"
-           , if profiling `elem` ways
-             then  "--enable-library-profiling"
-             else "--disable-library-profiling"
-           , if dynamic `elem` ways
-             then  "--enable-shared"
-             else "--disable-shared" ]
+    pure [ if vanilla `elem` ways
+           then  "--enable-library-vanilla"
+           else "--disable-library-vanilla"
+         , if vanilla `elem` ways && withGhci && not (dynamicGhcPrograms flavour)
+           then  "--enable-library-for-ghci"
+           else "--disable-library-for-ghci"
+         , if profiling `elem` ways
+           then  "--enable-library-profiling"
+           else "--disable-library-profiling"
+         , if dynamic `elem` ways
+           then  "--enable-shared"
+           else "--disable-shared" ]
 
 -- TODO: LD_OPTS?
 configureArgs :: Args
@@ -67,28 +67,28 @@ configureArgs = do
             not (null values) ?
                 arg ("--configure-option=" ++ key ++ "=" ++ values)
         cFlags   = mconcat [ remove ["-Werror"] cArgs
-                           , argStagedSettingList ConfCcArgs
+                           , getStagedSettingList ConfCcArgs
                            , arg $ "-I" ++ top -/- generatedPath ]
-        ldFlags  = ldArgs  <> (argStagedSettingList ConfGccLinkerArgs)
-        cppFlags = cppArgs <> (argStagedSettingList ConfCppArgs)
+        ldFlags  = ldArgs  <> (getStagedSettingList ConfGccLinkerArgs)
+        cppFlags = cppArgs <> (getStagedSettingList ConfCppArgs)
     cldFlags <- unwords <$> (cFlags <> ldFlags)
     mconcat
         [ conf "CFLAGS"   cFlags
         , conf "LDFLAGS"  ldFlags
         , conf "CPPFLAGS" cppFlags
         , not (null cldFlags) ? arg ("--gcc-options=" ++ cldFlags)
-        , conf "--with-iconv-includes"    $ return <$> getSetting IconvIncludeDir
-        , conf "--with-iconv-libraries"   $ return <$> getSetting IconvLibDir
-        , conf "--with-gmp-includes"      $ return <$> getSetting GmpIncludeDir
-        , conf "--with-gmp-libraries"     $ return <$> getSetting GmpLibDir
-        , conf "--with-curses-libraries"  $ return <$> getSetting CursesLibDir
-        , crossCompiling ? (conf "--host" $ return <$> getSetting TargetPlatformFull)
-        , conf "--with-cc" $ argStagedBuilderPath (Cc CompileC) ]
+        , conf "--with-iconv-includes"    $ arg =<< getSetting IconvIncludeDir
+        , conf "--with-iconv-libraries"   $ arg =<< getSetting IconvLibDir
+        , conf "--with-gmp-includes"      $ arg =<< getSetting GmpIncludeDir
+        , conf "--with-gmp-libraries"     $ arg =<< getSetting GmpLibDir
+        , conf "--with-curses-libraries"  $ arg =<< getSetting CursesLibDir
+        , crossCompiling ? (conf "--host" $ arg =<< getSetting TargetPlatformFull)
+        , conf "--with-cc" $ arg =<< getBuilderPath . (Cc CompileC) =<< getStage ]
 
 packageConstraints :: Args
 packageConstraints = stage0 ? do
     constraints <- expr . readFileLines $ bootPackageConstraints
-    append $ concat [ ["--constraint", c] | c <- constraints ]
+    pure $ concat [ ["--constraint", c] | c <- constraints ]
 
 cppArgs :: Args
 cppArgs = arg $ "-I" ++ generatedPath
index adcbc97..5353e00 100644 (file)
@@ -32,18 +32,18 @@ haddockBuilderArgs = builder Haddock ? do
         , arg $ "--title=" ++ pkgNameString pkg ++ "-" ++ version ++ ": " ++ synopsis
         , arg $ "--prologue=" ++ path -/- "haddock-prologue.txt"
         , arg $ "--optghc=-D__HADDOCK_VERSION__=" ++ show (versionToInt hVersion)
-        , append . map ("--hide=" ++) =<< getPkgDataList HiddenModules
-        , append $ [ "--read-interface=../" ++ dep
-                     ++ ",../" ++ dep ++ "/src/%{MODULE/./-}.html\\#%{NAME},"
-                     ++ pkgHaddockFile (vanillaContext Stage1 depPkg)
-                   | (dep, depName) <- zip deps depNames
-                   , Just depPkg <- [findKnownPackage $ PackageName depName]
-                   , depPkg /= rts ]
-        , append [ "--optghc=" ++ opt | opt <- ghcOpts ]
+        , map ("--hide=" ++) <$> getPkgDataList HiddenModules
+        , pure [ "--read-interface=../" ++ dep
+                 ++ ",../" ++ dep ++ "/src/%{MODULE/./-}.html\\#%{NAME},"
+                 ++ pkgHaddockFile (vanillaContext Stage1 depPkg)
+               | (dep, depName) <- zip deps depNames
+               , Just depPkg <- [findKnownPackage $ PackageName depName]
+               , depPkg /= rts ]
+        , pure [ "--optghc=" ++ opt | opt <- ghcOpts ]
         , isSpecified HsColour ?
-          append [ "--source-module=src/%{MODULE/./-}.html"
-                 , "--source-entity=src/%{MODULE/./-}.html\\#%{NAME}" ]
-        , append =<< getInputs
+          pure [ "--source-module=src/%{MODULE/./-}.html"
+               , "--source-entity=src/%{MODULE/./-}.html\\#%{NAME}" ]
+        , getInputs
         , arg "+RTS"
         , arg $ "-t" ++ path -/- "haddock.t"
         , arg "--machine-readable"
index 6f1bae4..54ca1fc 100644 (file)
@@ -7,8 +7,6 @@ hsc2hsBuilderArgs = builder Hsc2Hs ? do
     stage   <- getStage
     ccPath  <- getBuilderPath $ Cc CompileC stage
     gmpDir  <- getSetting GmpIncludeDir
-    cFlags  <- getCFlags
-    lFlags  <- getLFlags
     top     <- expr topDirectory
     hArch   <- getSetting HostArch
     hOs     <- getSetting HostOs
@@ -20,9 +18,9 @@ hsc2hsBuilderArgs = builder Hsc2Hs ? do
     mconcat [ arg $ "--cc=" ++ ccPath
             , arg $ "--ld=" ++ ccPath
             , notM windowsHost ? arg "--cross-safe"
-            , append . map ("-I"       ++) $ words gmpDir
-            , append $ map ("--cflag=" ++) cFlags
-            , append $ map ("--lflag=" ++) lFlags
+            , pure $ map ("-I" ++) (words gmpDir)
+            , map ("--cflag=" ++) <$> getCFlags
+            , map ("--lflag=" ++) <$> getLFlags
             , notStage0 ? crossCompiling ? arg "--cross-compile"
             , stage0    ? arg ("--cflag=-D" ++ hArch ++ "_HOST_ARCH=1")
             , stage0    ? arg ("--cflag=-D" ++ hOs   ++ "_HOST_OS=1"  )
@@ -37,25 +35,21 @@ hsc2hsBuilderArgs = builder Hsc2Hs ? do
 getCFlags :: Expr [String]
 getCFlags = do
     context   <- getContext
-    cppArgs   <- getPkgDataList CppArgs
-    depCcArgs <- getPkgDataList DepCcArgs
-    mconcat [ remove ["-O"] (cArgs <> argStagedSettingList ConfCcArgs)
-            , argStagedSettingList ConfCppArgs
+    mconcat [ remove ["-O"] (cArgs <> getStagedSettingList ConfCcArgs)
+            , getStagedSettingList ConfCppArgs
             , cIncludeArgs
-            , append cppArgs
-            , append depCcArgs
+            , getPkgDataList CppArgs
+            , getPkgDataList DepCcArgs
             , cWarnings
             , arg "-include", arg $ autogenPath context -/- "cabal_macros.h" ]
 
 getLFlags :: Expr [String]
 getLFlags = do
-    pkgLdArgs <- getPkgDataList LdArgs
     libDirs   <- getPkgDataList DepLibDirs
     extraLibs <- getPkgDataList DepExtraLibs
-    depLdArgs <- getPkgDataList DepLdArgs
-    mconcat [ argStagedSettingList ConfGccLinkerArgs
+    mconcat [ getStagedSettingList ConfGccLinkerArgs
             , ldArgs
-            , append pkgLdArgs
-            , append $ [ "-L" ++ unifyPath dir | dir <- libDirs ]
-            , append $ [ "-l" ++ unifyPath dir | dir <- extraLibs ]
-            , append depLdArgs ]
+            , getPkgDataList LdArgs
+            , pure [ "-L" ++ unifyPath dir | dir <- libDirs ]
+            , pure [ "-l" ++ unifyPath dir | dir <- extraLibs ]
+            , getPkgDataList DepLdArgs ]
index 7d4cfb6..2715bbb 100644 (file)
@@ -3,7 +3,7 @@ module Settings.Builders.Ld (ldBuilderArgs) where
 import Settings.Builders.Common
 
 ldBuilderArgs :: Args
-ldBuilderArgs = builder Ld ? mconcat [ argStagedSettingList ConfLdLinkerArgs
+ldBuilderArgs = builder Ld ? mconcat [ getStagedSettingList ConfLdLinkerArgs
                                      , arg "-r"
                                      , arg "-o", arg =<< getOutput
-                                     , append =<< getInputs ]
+                                     , getInputs ]
index e770769..b3c04c1 100644 (file)
@@ -7,6 +7,6 @@ makeBuilderArgs = do
     threads <- shakeThreads <$> (expr getShakeOptions)
     let t = show $ max 4 (threads - 2) -- Don't use all Shake's threads
     mconcat
-        [ builder (Make gmpBuildPath     ) ? append ["MAKEFLAGS=-j" ++ t]
-        , builder (Make libffiBuildPath  ) ? append ["MAKEFLAGS=-j" ++ t, "install"]
-        , builder (Make "testsuite/tests") ? append ["THREADS=" ++ t, "fast"] ]
+        [ builder (Make gmpBuildPath     ) ? pure ["MAKEFLAGS=-j" ++ t]
+        , builder (Make libffiBuildPath  ) ? pure ["MAKEFLAGS=-j" ++ t, "install"]
+        , builder (Make "testsuite/tests") ? pure ["THREADS=" ++ t, "fast"] ]
index b27fda5..bc5159d 100644 (file)
@@ -52,7 +52,7 @@ data SourceArgs = SourceArgs
 sourceArgs :: SourceArgs -> Args
 sourceArgs SourceArgs {..} = builder Ghc ? mconcat
     [ hsDefault
-    , append =<< getPkgDataList HsArgs
+    , getPkgDataList HsArgs
     , libraryPackage   ? hsLibrary
     , package compiler ? hsCompiler
     , package ghc      ? hsGhc ]
@@ -96,64 +96,64 @@ stage0Packages :: Packages
 stage0Packages = do
     win <- expr windowsHost
     ios <- expr iosHost
-    append $ [ binary
-             , cabal
-             , checkApiAnnotations
-             , compareSizes
-             , compiler
-             , deriveConstants
-             , dllSplit
-             , genapply
-             , genprimopcode
-             , ghc
-             , ghcBoot
-             , ghcBootTh
-             , ghcCabal
-             , ghci
-             , ghcPkg
-             , ghcTags
-             , hsc2hs
-             , hp2ps
-             , hpc
-             , mkUserGuidePart
-             , templateHaskell
-             , transformers
-             , unlit                       ] ++
-             [ terminfo | not win, not ios ] ++
-             [ touchy   | win              ]
+    pure $ [ binary
+           , cabal
+           , checkApiAnnotations
+           , compareSizes
+           , compiler
+           , deriveConstants
+           , dllSplit
+           , genapply
+           , genprimopcode
+           , ghc
+           , ghcBoot
+           , ghcBootTh
+           , ghcCabal
+           , ghci
+           , ghcPkg
+           , ghcTags
+           , hsc2hs
+           , hp2ps
+           , hpc
+           , mkUserGuidePart
+           , templateHaskell
+           , transformers
+           , unlit                       ] ++
+           [ terminfo | not win, not ios ] ++
+           [ touchy   | win              ]
 
 stage1Packages :: Packages
 stage1Packages = do
     win <- expr windowsHost
     doc <- buildHaddock flavour
     mconcat [ (filter isLibrary) <$> stage0Packages -- Build all Stage0 libraries in Stage1
-            , append $ [ array
-                       , base
-                       , bytestring
-                       , containers
-                       , deepseq
-                       , directory
-                       , filepath
-                       , ghc
-                       , ghcCabal
-                       , ghcCompact
-                       , ghcPrim
-                       , haskeline
-                       , hpcBin
-                       , hsc2hs
-                       , integerLibrary flavour
-                       , pretty
-                       , process
-                       , rts
-                       , runGhc
-                       , time               ] ++
-                       [ iservBin | not win ] ++
-                       [ unix     | not win ] ++
-                       [ win32    | win     ] ++
-                       [ xhtml    | doc     ] ]
+            , pure $ [ array
+                     , base
+                     , bytestring
+                     , containers
+                     , deepseq
+                     , directory
+                     , filepath
+                     , ghc
+                     , ghcCabal
+                     , ghcCompact
+                     , ghcPrim
+                     , haskeline
+                     , hpcBin
+                     , hsc2hs
+                     , integerLibrary flavour
+                     , pretty
+                     , process
+                     , rts
+                     , runGhc
+                     , time               ] ++
+                     [ iservBin | not win ] ++
+                     [ unix     | not win ] ++
+                     [ win32    | win     ] ++
+                     [ xhtml    | doc     ] ]
 
 stage2Packages :: Packages
-stage2Packages = buildHaddock flavour ? append [ haddock ]
+stage2Packages = buildHaddock flavour ? pure [ haddock ]
 
 -- | Default build ways for library packages:
 -- * We always build 'vanilla' way.
@@ -161,19 +161,19 @@ stage2Packages = buildHaddock flavour ? append [ haddock ]
 -- * We build 'dynamic' way when stage > Stage0 and the platform supports it.
 defaultLibraryWays :: Ways
 defaultLibraryWays = mconcat
-    [ append [vanilla]
-    , notStage0 ? append [profiling]
-    , notStage0 ? platformSupportsSharedLibs ? append [dynamic] ]
+    [ pure [vanilla]
+    , notStage0 ? pure [profiling]
+    , notStage0 ? platformSupportsSharedLibs ? pure [dynamic] ]
 
 -- | Default build ways for the RTS.
 defaultRtsWays :: Ways
 defaultRtsWays = do
     ways <- getLibraryWays
     mconcat
-        [ append [ logging, debug, threaded, threadedDebug, threadedLogging ]
-        , (profiling `elem` ways) ? append [threadedProfiling]
+        [ pure [ logging, debug, threaded, threadedDebug, threadedLogging ]
+        , (profiling `elem` ways) ? pure [threadedProfiling]
         , (dynamic `elem` ways) ?
-          append [ dynamic, debugDynamic, threadedDynamic, threadedDebugDynamic
+          pure [ dynamic, debugDynamic, threadedDynamic, threadedDebugDynamic
                  , loggingDynamic, threadedLoggingDynamic ] ]
 
 -- | Default build flavour. Other build flavours are defined in modules
@@ -232,35 +232,35 @@ defaultBuilderArgs = mconcat
 disableWarningArgs :: Args
 disableWarningArgs = builder Ghc ? mconcat
     [ stage0 ? mconcat
-      [ package terminfo     ? append [ "-fno-warn-unused-imports" ]
-      , package transformers ? append [ "-fno-warn-unused-matches"
-                                      , "-fno-warn-unused-imports" ]
-      , libraryPackage       ? append [ "-fno-warn-deprecated-flags" ] ]
+      [ package terminfo     ? pure [ "-fno-warn-unused-imports" ]
+      , package transformers ? pure [ "-fno-warn-unused-matches"
+                                    , "-fno-warn-unused-imports" ]
+      , libraryPackage       ? pure [ "-fno-warn-deprecated-flags" ] ]
 
     , notStage0 ? mconcat
-      [ package base         ? append [ "-Wno-trustworthy-safe" ]
-      , package binary       ? append [ "-Wno-deprecations" ]
-      , package bytestring   ? append [ "-Wno-inline-rule-shadowing" ]
-      , package directory    ? append [ "-Wno-unused-imports" ]
-      , package ghcPrim      ? append [ "-Wno-trustworthy-safe" ]
-      , package haddock      ? append [ "-Wno-unused-imports"
-                                      , "-Wno-deprecations" ]
-      , package haskeline    ? append [ "-Wno-deprecations"
-                                      , "-Wno-unused-imports"
-                                      , "-Wno-redundant-constraints"
-                                      , "-Wno-simplifiable-class-constraints" ]
-      , package pretty       ? append [ "-Wno-unused-imports" ]
-      , package primitive    ? append [ "-Wno-unused-imports"
-                                      , "-Wno-deprecations" ]
-      , package terminfo     ? append [ "-Wno-unused-imports" ]
-      , package transformers ? append [ "-Wno-unused-matches"
-                                      , "-Wno-unused-imports"
-                                      , "-Wno-redundant-constraints"
-                                      , "-Wno-orphans" ]
-      , package win32        ? append [ "-Wno-trustworthy-safe" ]
-      , package xhtml        ? append [ "-Wno-unused-imports"
-                                      , "-Wno-tabs" ]
-      , libraryPackage       ? append [ "-Wno-deprecated-flags" ] ] ]
+      [ package base         ? pure [ "-Wno-trustworthy-safe" ]
+      , package binary       ? pure [ "-Wno-deprecations" ]
+      , package bytestring   ? pure [ "-Wno-inline-rule-shadowing" ]
+      , package directory    ? pure [ "-Wno-unused-imports" ]
+      , package ghcPrim      ? pure [ "-Wno-trustworthy-safe" ]
+      , package haddock      ? pure [ "-Wno-unused-imports"
+                                    , "-Wno-deprecations" ]
+      , package haskeline    ? pure [ "-Wno-deprecations"
+                                    , "-Wno-unused-imports"
+                                    , "-Wno-redundant-constraints"
+                                    , "-Wno-simplifiable-class-constraints" ]
+      , package pretty       ? pure [ "-Wno-unused-imports" ]
+      , package primitive    ? pure [ "-Wno-unused-imports"
+                                    , "-Wno-deprecations" ]
+      , package terminfo     ? pure [ "-Wno-unused-imports" ]
+      , package transformers ? pure [ "-Wno-unused-matches"
+                                    , "-Wno-unused-imports"
+                                    , "-Wno-redundant-constraints"
+                                    , "-Wno-orphans" ]
+      , package win32        ? pure [ "-Wno-trustworthy-safe" ]
+      , package xhtml        ? pure [ "-Wno-unused-imports"
+                                    , "-Wno-tabs" ]
+      , libraryPackage       ? pure [ "-Wno-deprecated-flags" ] ] ]
 
 -- | All 'Package'-dependent command line arguments.
 defaultPackageArgs :: Args
index a054362..7d59407 100644 (file)
@@ -14,7 +14,7 @@ developmentArgs :: Stage -> Args
 developmentArgs ghcStage = do
     stage <- getStage
     sourceArgs $ SourceArgs
-        { hsDefault  = append ["-O", "-H32m"]
+        { hsDefault  = pure ["-O", "-H32m"]
         , hsLibrary  = notStage0 ? arg "-dcore-lint"
-        , hsCompiler = succ stage == ghcStage ? append ["-O0", "-DDEBUG"]
-        , hsGhc      = succ stage == ghcStage ? append ["-O0", "-DDEBUG"] }
+        , hsCompiler = succ stage == ghcStage ? pure ["-O0", "-DDEBUG"]
+        , hsGhc      = succ stage == ghcStage ? pure ["-O0", "-DDEBUG"] }
index 3749d72..2867fab 100644 (file)
@@ -11,7 +11,7 @@ performanceFlavour = defaultFlavour
 
 performanceArgs :: Args
 performanceArgs = sourceArgs $ SourceArgs
-    { hsDefault  = append ["-O", "-H32m"]
+    { hsDefault  = pure ["-O", "-H32m"]
     , hsLibrary  = notStage0 ? arg "-O2"
     , hsCompiler = mconcat [stage0 ? arg "-O", notStage0 ? arg "-O2"]
     , hsGhc      = mconcat [stage0 ? arg "-O", notStage0 ? arg "-O2"] }
index 29d222f..6e95141 100644 (file)
@@ -12,7 +12,7 @@ profiledFlavour = defaultFlavour
 
 profiledArgs :: Args
 profiledArgs = sourceArgs $ SourceArgs
-    { hsDefault  = append ["-O0", "-H32m"]
+    { hsDefault  = pure ["-O0", "-H32m"]
     , hsLibrary  = notStage0 ? arg "-O"
     , hsCompiler = arg "-O"
     , hsGhc      = arg "-O" }
index fc3d696..1a50a57 100644 (file)
@@ -10,12 +10,12 @@ quickFlavour = defaultFlavour
     { name        = "quick"
     , args        = defaultBuilderArgs <> quickArgs <> defaultPackageArgs
     , libraryWays = mconcat
-                    [ append [vanilla]
-                    , notStage0 ? platformSupportsSharedLibs ? append [dynamic] ] }
+                    [ pure [vanilla]
+                    , notStage0 ? platformSupportsSharedLibs ? pure [dynamic] ] }
 
 quickArgs :: Args
 quickArgs = sourceArgs $ SourceArgs
-    { hsDefault  = append ["-O0", "-H32m"]
+    { hsDefault  = pure ["-O0", "-H32m"]
     , hsLibrary  = notStage0 ? arg "-O"
     , hsCompiler =    stage0 ? arg "-O"
     , hsGhc      =    stage0 ? arg "-O" }
index 8a79f80..f2f0c09 100644 (file)
@@ -8,17 +8,17 @@ quickestFlavour :: Flavour
 quickestFlavour = defaultFlavour
     { name        = "quickest"
     , args        = defaultBuilderArgs <> quickestArgs <> defaultPackageArgs
-    , libraryWays = append [vanilla]
+    , libraryWays = pure [vanilla]
     , rtsWays     = quickestRtsWays }
 
 quickestArgs :: Args
 quickestArgs = sourceArgs $ SourceArgs
-    { hsDefault  = append ["-O0", "-H32m"]
+    { hsDefault  = pure ["-O0", "-H32m"]
     , hsLibrary  = mempty
     , hsCompiler = mempty
     , hsGhc      = mempty }
 
 quickestRtsWays :: Ways
 quickestRtsWays = mconcat
-    [ append [vanilla]
-    , buildHaddock defaultFlavour ? append [threaded] ]
+    [ pure [vanilla]
+    , buildHaddock defaultFlavour ? pure [threaded] ]
index 7cb52b6..4b8108a 100644 (file)
@@ -4,8 +4,8 @@ import GHC
 import Expression
 
 cabalPackageArgs :: Args
-cabalPackageArgs = package cabal ? do
+cabalPackageArgs = package cabal ?
     -- Cabal is a rather large library and quite slow to compile. Moreover, we
     -- build it for stage0 only so we can link ghc-pkg against it, so there is
     -- little reason to spend the effort to optimize it.
-    stage Stage0 ? builder Ghc ? append [ "-O0" ]
+    stage0 ? builder Ghc ? arg "-O0"
index 90d0864..7b2d069 100644 (file)
@@ -18,7 +18,7 @@ compilerPackageArgs = package compiler ? do
             , builder (Ghc CompileHs) ? mconcat
               [ inputs ["//GHC.hs", "//GhcMake.hs"] ? arg "-fprof-auto"
               , input "//Parser.hs" ?
-                append ["-O0", "-fno-ignore-interface-pragmas", "-fcmm-sink" ] ]
+                pure ["-O0", "-fno-ignore-interface-pragmas", "-fcmm-sink" ] ]
 
             , builder GhcCabal ? mconcat
               [ arg $ "--ghc-option=-DSTAGE=" ++ show (fromEnum stage + 1)
index 0804eb5..eb7a567 100644 (file)
@@ -21,7 +21,7 @@ ghcCabalPackageArgs = stage0 ? package ghcCabal ? builder Ghc ? do
         cabalVersion = display . pkgVersion $ identifier
 
     mconcat
-        [ append [ "-package " ++ pkgNameString pkg | pkg <- cabalDeps ]
+        [ pure [ "-package " ++ pkgNameString pkg | pkg <- cabalDeps ]
         , arg "--make"
         , arg "-j"
         , arg ("-DCABAL_VERSION=" ++ replace "." "," cabalVersion)
index bc69006..a1021d7 100644 (file)
@@ -5,4 +5,4 @@ import Expression
 
 haddockPackageArgs :: Args
 haddockPackageArgs = package haddock ?
-    builder GhcCabal ? append ["--flag", "in-ghc-tree"]
+    builder GhcCabal ? pure ["--flag", "in-ghc-tree"]
index 9944641..e32e301 100644 (file)
@@ -69,7 +69,7 @@ rtsPackageArgs = package rts ? do
           , inputs ["//RtsMessages.c", "//Trace.c"] ?
             arg ("-DProjectVersion=" ++ show projectVersion)
 
-          , input "//RtsUtils.c" ? append
+          , input "//RtsUtils.c" ? pure
             [ "-DProjectVersion="            ++ show projectVersion
             , "-DHostPlatform="              ++ show hostPlatform
             , "-DHostArch="                  ++ show hostArch
@@ -89,18 +89,17 @@ rtsPackageArgs = package rts ? do
             , inputs ["//Evac.c", "//Evac_thr.c"] ? arg "-funroll-loops"
 
             , inputs ["//Evac_thr.c", "//Scav_thr.c"] ?
-              append [ "-DPARALLEL_GC", "-Irts/sm" ]
+              pure [ "-DPARALLEL_GC", "-Irts/sm" ]
 
             , input "//StgCRun.c" ? windowsHost ? arg "-Wno-return-local-addr"
             , input "//RetainerProfile.c" ? flag GccIsClang ?
-                append [ "-Wno-incompatible-pointer-types" ]
-            ]
+              pure [ "-Wno-incompatible-pointer-types" ] ]
 
     mconcat
         [ builder (Cc FindCDependencies) ? mconcat cArgs
         , builder (Ghc CompileCWithGhc) ? mconcat (map (map ("-optc" ++) <$>) cArgs)
         , builder Ghc ? arg "-Irts"
-        , builder HsCpp ? append
+        , builder HsCpp ? pure
           [ "-DTOP="             ++ show top
           , "-DFFI_INCLUDE_DIR=" ++ show ffiIncludeDir
           , "-DFFI_LIB_DIR="     ++ show ffiLibraryDir
@@ -109,12 +108,9 @@ rtsPackageArgs = package rts ? do
         , builder HsCpp ?
           input "//package.conf.in" ?
           output "//package.conf.install.raw" ?
-          append
-            [ "-DINSTALLING"
-            , "-DLIB_DIR=\"" ++ destDir ++ ghclibDir ++ "\""
-            , "-DINCLUDE_DIR=\"" ++ destDir ++ ghclibDir -/- "include\""
-            ]
-        ]
+          pure [ "-DINSTALLING"
+               , "-DLIB_DIR=\"" ++ destDir ++ ghclibDir ++ "\""
+               , "-DINCLUDE_DIR=\"" ++ destDir ++ ghclibDir -/- "include\"" ] ]
 
 -- # If we're compiling on windows, enforce that we only support XP+
 -- # Adding this here means it doesn't have to be done in individual .c files
index 7aad5dd..0e3a391 100644 (file)
@@ -7,4 +7,4 @@ import Expression
 runGhcPackageArgs :: Args
 runGhcPackageArgs = package runGhc ? builder Ghc ? input "//Main.hs" ? do
     version <- getSetting ProjectVersion
-    append ["-cpp", "-DVERSION=" ++ show version]
+    pure ["-cpp", "-DVERSION=" ++ show version]