[commit: ghc] wip/nfs-locking: Add Expressions.removePair function to remove pairs of arguments. (9140548)
git at git.haskell.org
git at git.haskell.org
Fri Oct 27 00:20:00 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/nfs-locking
Link : http://ghc.haskell.org/trac/ghc/changeset/9140548b75f96d17e9888a21bf32a2f46d447cbe/ghc
>---------------------------------------------------------------
commit 9140548b75f96d17e9888a21bf32a2f46d447cbe
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date: Wed Dec 30 03:03:26 2015 +0000
Add Expressions.removePair function to remove pairs of arguments.
>---------------------------------------------------------------
9140548b75f96d17e9888a21bf32a2f46d447cbe
src/Expression.hs | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/Expression.hs b/src/Expression.hs
index 2b7ef9a..a2eaea9 100644
--- a/src/Expression.hs
+++ b/src/Expression.hs
@@ -3,7 +3,8 @@ module Expression (
-- * Expressions
Expr, DiffExpr, fromDiffExpr,
-- ** Operators
- apply, append, arg, remove, appendSub, appendSubD, filterSub, removeSub,
+ apply, append, arg, remove, removePair,
+ appendSub, appendSubD, filterSub, removeSub,
-- ** Evaluation
interpret, interpretPartial, interpretWithStage, interpretDiff,
-- ** Predicates
@@ -76,6 +77,16 @@ append x = apply (<> x)
remove :: Eq a => [a] -> DiffExpr [a]
remove xs = apply $ filter (`notElem` xs)
+-- | Remove given pair of elements from a list expression
+-- Example: removePair "-flag" "b" ["-flag", "a", "-flag", "b"] = ["-flag", "a"]
+removePair :: Eq a => a -> a -> DiffExpr [a]
+removePair x y = apply filterPair
+ where
+ filterPair (z1 : z2 : zs) = if x == z1 && y == z2
+ then filterPair zs
+ else z1 : filterPair (z2 : zs)
+ filterPair zs = zs
+
-- | Apply a predicate to an expression
applyPredicate :: Monoid a => Predicate -> Expr a -> Expr a
applyPredicate predicate expr = do
More information about the ghc-commits
mailing list