Improve rulesExtraDependencies usage

This commit is contained in:
Jasper Van der Jeugt 2014-10-28 10:53:35 +01:00
parent 24e0c1a918
commit 3c15d0fd34

View file

@ -181,10 +181,32 @@ preprocess = Rules . liftIO
--
-- A useful utility for this purpose is 'makePatternDependency'.
rulesExtraDependencies :: [Dependency] -> Rules a -> Rules a
rulesExtraDependencies deps = Rules . censor addDependencies . unRules
rulesExtraDependencies deps rules =
-- Note that we add the dependencies seemingly twice here. However, this is
-- done so that 'rulesExtraDependencies' works both if we have something
-- like:
--
-- > match "*.css" $ rulesExtraDependencies [foo] $ ...
--
-- and something like:
--
-- > rulesExtraDependencies [foo] $ match "*.css" $ ...
--
-- (1) takes care of the latter and (2) of the former.
Rules $ censor fixRuleSet $ do
x <- unRules rules
fixCompiler
return x
where
-- Adds the dependencies to the compilers in the ruleset
addDependencies ruleSet = ruleSet
-- (1) Adds the dependencies to the compilers we are yet to create
fixCompiler = modify $ \s -> case rulesCompiler s of
Nothing -> s
Just c -> s
{ rulesCompiler = Just $ compilerTellDependencies deps >> c
}
-- (2) Adds the dependencies to the compilers that are already in the ruleset
fixRuleSet ruleSet = ruleSet
{ rulesCompilers =
[ (i, compilerTellDependencies deps >> c)
| (i, c) <- rulesCompilers ruleSet