@@ -17,6 +17,7 @@ import Control.Monad.Reader (ReaderT, runReaderT)
1717import Control.Monad.State (State, evalState)
1818import Data.Monoid (Monoid, mempty, mappend)
1919import Data.Set (Set)
20+import qualified Data.Map as M
2021
2122import Hakyll.Core.Resource
2223import Hakyll.Core.Resource.Provider
@@ -80,7 +81,7 @@ type Rules = RulesM ()
8081-- | Run a Rules monad, resulting in a 'RuleSet'
8182--
8283runRules :: Rules -> ResourceProvider -> RuleSet
83−runRules rules provider =
84+runRules rules provider = nubCompilers $
8485 evalState (execWriterT $ runReaderT (unRulesM rules) env) state
8586 where
8687 state = RuleState {rulesMetaCompilerIndex = 0}
@@ -88,3 +89,11 @@ runRules rules provider =
8889 , rulesPattern = mempty
8990 , rulesGroup = Nothing
9091 }
92+
93+-- | Remove duplicate compilers from the 'RuleSet'. When two compilers match an
94+-- item, we prefer the first one
95+--
96+nubCompilers :: RuleSet -> RuleSet
97+nubCompilers set = set { rulesCompilers = nubCompilers' (rulesCompilers set) }
98+ where
99+ nubCompilers' = M.toList . M.fromListWith (flip const)