[commit: ghc] wip/nfs-locking: Split up definitions in Rules.hs (20381e5)

git at git.haskell.org git at git.haskell.org
Fri Oct 27 00:01:07 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/nfs-locking
Link       : http://ghc.haskell.org/trac/ghc/changeset/20381e58208ca2693f034566e450f5b0b28674b4/ghc

>---------------------------------------------------------------

commit 20381e58208ca2693f034566e450f5b0b28674b4
Author: David Luposchainsky <dluposchainsky at gmail.com>
Date:   Wed Jan 6 14:49:58 2016 +0100

    Split up definitions in Rules.hs


>---------------------------------------------------------------

20381e58208ca2693f034566e450f5b0b28674b4
 src/Rules.hs | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/src/Rules.hs b/src/Rules.hs
index 22c5230..f8b2810 100644
--- a/src/Rules.hs
+++ b/src/Rules.hs
@@ -1,6 +1,8 @@
 module Rules (generateTargets, packageRules) where
 
 import Base
+import Data.Foldable
+import Data.Traversable
 import Expression
 import GHC
 import Rules.Generate
@@ -8,26 +10,31 @@ import Rules.Package
 import Rules.Resources
 import Settings
 
+allStages :: [Stage]
+allStages = [Stage0 ..]
+
 -- TODO: not all program targets should be needed explicitly
--- | generateTargets needs top-level build targets
+-- | 'need' all top-level build targets
 generateTargets :: Rules ()
 generateTargets = action $ do
-    targets <- fmap concat . forM [Stage0 ..] $ \stage -> do
-        pkgs <- interpretWithStage stage getPackages
-        let libPkgs = filter isLibrary pkgs \\ [rts, libffi]
-        libTargets <- fmap concat . forM libPkgs $ \pkg -> do
-            let target = PartialTarget stage pkg
-            needHaddock <- interpretPartial target buildHaddock
-            return [ pkgHaddockFile pkg | needHaddock && stage == Stage1 ]
-        let programTargets = [ prog | Just prog <- programPath stage <$> pkgs ]
-        return $ libTargets ++ programTargets
-
+    targets <- fmap concat (traverse targetsForStage allStages)
     rtsLib <- pkgLibraryFile Stage1 rts "rts" vanilla
     need $ targets ++ installTargets ++ [ rtsLib ]
 
+targetsForStage :: Stage -> Action [String]
+targetsForStage stage = do
+    pkgs <- interpretWithStage stage getPackages
+    let libPkgs = filter isLibrary pkgs \\ [rts, libffi]
+    libTargets <- fmap concat . for libPkgs $ \pkg -> do
+        let target = PartialTarget stage pkg
+        needHaddock <- interpretPartial target buildHaddock
+        return [ pkgHaddockFile pkg | needHaddock && stage == Stage1 ]
+    let programTargets = [ prog | Just prog <- programPath stage <$> pkgs ]
+    return (libTargets ++ programTargets)
+
 packageRules :: Rules ()
 packageRules = do
     resources <- resourceRules
-    forM_ [Stage0 ..] $ \stage ->
-        forM_ knownPackages $ \pkg ->
+    for allStages $ \stage ->
+        for_ knownPackages $ \pkg ->
             buildPackage resources $ PartialTarget stage pkg



More information about the ghc-commits mailing list