[commit: ghc] wip/nfs-locking: Add productArgs and concatArgs helper functions. (018f850)
git at git.haskell.org
git at git.haskell.org
Thu Oct 26 23:20:21 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/nfs-locking
Link : http://ghc.haskell.org/trac/ghc/changeset/018f8501c40e1c8b70da99c2b836750e9815f75d/ghc
>---------------------------------------------------------------
commit 018f8501c40e1c8b70da99c2b836750e9815f75d
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date: Sun Jan 11 17:01:02 2015 +0000
Add productArgs and concatArgs helper functions.
>---------------------------------------------------------------
018f8501c40e1c8b70da99c2b836750e9815f75d
src/Base.hs | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/src/Base.hs b/src/Base.hs
index 38790e6..b84b48c 100644
--- a/src/Base.hs
+++ b/src/Base.hs
@@ -12,12 +12,12 @@ module Base (
Condition (..),
(<+>),
filterOut,
- prefixArgs
+ productArgs, concatArgs
) where
-import Development.Shake
+import Development.Shake hiding ((*>))
import Development.Shake.FilePath
-import Control.Applicative hiding ((*>))
+import Control.Applicative
import Data.Function
import Data.Monoid
import Data.List
@@ -32,9 +32,10 @@ instance Monoid a => Monoid (Action a) where
mempty = return mempty
mappend p q = mappend <$> p <*> q
+-- Using the Creators' trick for overlapping String instances
class ShowArgs a where
showArgs :: a -> Args
- showListArgs :: [a] -> Args -- the Creators' trick for overlapping String instances
+ showListArgs :: [a] -> Args
showListArgs = mconcat . map showArgs
instance ShowArgs Char where
@@ -62,8 +63,18 @@ filterOut as exclude = do
exclude' <- showArgs exclude
filter (`notElem` exclude') <$> as
--- Prefix each arg in a collection with a given prefix
-prefixArgs :: (ShowArgs a, ShowArgs b) => a -> b -> Args
-prefixArgs prefix as = do
- prefix' <- showArgs prefix
- concatMap (\a -> prefix' ++ [a]) <$> showArgs as
+-- Generate a cross product collection of two argument collections
+-- Example: productArgs ["-a", "-b"] "c" = arg ["-a", "c", "-b", "c"]
+productArgs :: (ShowArgs a, ShowArgs b) => a -> b -> Args
+productArgs as bs = do
+ as' <- showArgs as
+ bs' <- showArgs bs
+ return $ concat $ sequence [as', bs']
+
+-- Similar to productArgs but concat resulting arguments pairwise
+-- Example: concatArgs ["-a", "-b"] "c" = arg ["-ac", "-bc"]
+concatArgs :: (ShowArgs a, ShowArgs b) => a -> b -> Args
+concatArgs as bs = do
+ as' <- showArgs as
+ bs' <- showArgs bs
+ return $ map concat $ sequence [as', bs']
More information about the ghc-commits
mailing list