[commit: ghc] wip/nfs-locking: Refactor src/Base.hs. (06fd336)
git at git.haskell.org
git at git.haskell.org
Thu Oct 26 23:48:15 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/nfs-locking
Link : http://ghc.haskell.org/trac/ghc/changeset/06fd336d441e3a42b3056185ef40742404ec856d/ghc
>---------------------------------------------------------------
commit 06fd336d441e3a42b3056185ef40742404ec856d
Author: Andrey Mokhov <andrey.mokhov at ncl.ac.uk>
Date: Fri Jan 9 17:07:04 2015 +0000
Refactor src/Base.hs.
* Get rid of polyvariadic function for better readability and robustnes.
* Eliminate joinArgs and joinArgsSpaced functions. Users are
encouraged to use 'unwords <$>' and 'concat <$>' instead.
* Generalise filterOut function.
* Rename ShowAction to ShowArgs.
>---------------------------------------------------------------
06fd336d441e3a42b3056185ef40742404ec856d
src/Base.hs | 65 +++++++++++++++++++++----------------------------------------
1 file changed, 22 insertions(+), 43 deletions(-)
diff --git a/src/Base.hs b/src/Base.hs
index 8a98a7b..ce2714e 100644
--- a/src/Base.hs
+++ b/src/Base.hs
@@ -7,9 +7,9 @@ module Base (
module Data.Monoid,
module Data.List,
Stage (..),
- Args, arg, args, ShowAction (..),
+ Args, arg, ShowArgs (..),
Condition (..),
- joinArgs, joinArgsSpaced,
+ (<+>),
filterOut
) where
@@ -29,50 +29,29 @@ instance Monoid a => Monoid (Action a) where
mempty = return mempty
mappend p q = mappend <$> p <*> q
-class ShowAction a where
- showAction :: a -> Args
- showListAction :: [a] -> Args -- the Creators' trick for overlapping String instances
- showListAction = mconcat . map showAction
+class ShowArgs a where
+ showArgs :: a -> Args
+ showListArgs :: [a] -> Args -- the Creators' trick for overlapping String instances
+ showListArgs = mconcat . map showArgs
-instance ShowAction Char where
- showAction c = return [[c]]
- showListAction s = return [s]
+instance ShowArgs Char where
+ showArgs c = return [[c]]
+ showListArgs s = return [s]
-instance ShowAction a => ShowAction [a] where
- showAction = showListAction
+instance ShowArgs a => ShowArgs [a] where
+ showArgs = showListArgs
-instance ShowAction a => ShowAction (Action a) where
- showAction = (showAction =<<)
+instance ShowArgs a => ShowArgs (Action a) where
+ showArgs = (showArgs =<<)
-arg :: ShowAction a => a -> Args
-arg = showAction
+arg :: ShowArgs a => a -> Args
+arg = showArgs
-type ArgsCombine = Args -> Args -> Args
+-- Combine two heterogeneous ShowArgs values.
+(<+>) :: (ShowArgs a, ShowArgs b) => a -> b -> Args
+a <+> b = (<>) <$> showArgs a <*> showArgs b
-class Collect a where
- collect :: ArgsCombine -> Args -> a
-
-instance Collect Args where
- collect = const id
-
-instance (ShowAction a, Collect r) => Collect (a -> r) where
- collect combine x = \y -> collect combine $ x `combine` arg y
-
-args :: Collect a => a
-args = collect (<>) mempty
-
-joinArgs :: Collect a => a
-joinArgs = collect (\x y -> intercalateArgs "" $ x <> y) mempty
-
-joinArgsSpaced :: Collect a => a
-joinArgsSpaced = collect (\x y -> intercalateArgs " " $ x <> y) mempty
-
-intercalateArgs :: String -> Args -> Args
-intercalateArgs s as = do
- as' <- as
- case as' of
- [] -> mempty
- otherwise -> return [intercalate s as']
-
-filterOut :: Args -> [String] -> Args
-filterOut as list = filter (`notElem` list) <$> as
+filterOut :: ShowArgs a => Args -> a -> Args
+filterOut as exclude = do
+ exclude' <- showArgs exclude
+ filter (`notElem` exclude') <$> as
More information about the ghc-commits
mailing list