@@ -181,10 +181,32 @@ preprocess = Rules . liftIO
181181--
182182-- A useful utility for this purpose is 'makePatternDependency'.
183183rulesExtraDependencies :: [Dependency] -> Rules a -> Rules a
184−rulesExtraDependencies deps = Rules . censor addDependencies . unRules
184+rulesExtraDependencies deps rules =
185+ -- Note that we add the dependencies seemingly twice here. However, this is
186+ -- done so that 'rulesExtraDependencies' works both if we have something
187+ -- like:
188+ --
189+ -- > match "*.css" $ rulesExtraDependencies [foo] $ ...
190+ --
191+ -- and something like:
192+ --
193+ -- > rulesExtraDependencies [foo] $ match "*.css" $ ...
194+ --
195+ -- (1) takes care of the latter and (2) of the former.
196+ Rules $ censor fixRuleSet $ do
197+ x <- unRules rules
198+ fixCompiler
199+ return x
185200 where
186− -- Adds the dependencies to the compilers in the ruleset
187− addDependencies ruleSet = ruleSet
201+ -- (1) Adds the dependencies to the compilers we are yet to create
202+ fixCompiler = modify $ \s -> case rulesCompiler s of
203+ Nothing -> s
204+ Just c -> s
205+ { rulesCompiler = Just $ compilerTellDependencies deps >> c
206+ }
207+
208+ -- (2) Adds the dependencies to the compilers that are already in the ruleset
209+ fixRuleSet ruleSet = ruleSet
188210 { rulesCompilers =
189211 [ (i, compilerTellDependencies deps >> c)
190212 | (i, c) <- rulesCompilers ruleSet