@@ -16,9 +16,9 @@ import Control.Applicative (Applicative, (<$>))
16import Control.Monad.Reader (ask)
16import Control.Monad.Reader (ask)
17import Control.Monad.RWS (RWST, runRWST)
17import Control.Monad.RWS (RWST, runRWST)
18import Control.Monad.Trans (liftIO)
18import Control.Monad.Trans (liftIO)
19+import qualified Data.Map as M
19import Data.Monoid (Monoid, mappend, mempty)
20import Data.Monoid (Monoid, mappend, mempty)
20import Data.Set (Set)
21import Data.Set (Set)
21−import qualified Data.Set as S
24--------------------------------------------------------------------------------
24--------------------------------------------------------------------------------
@@ -92,25 +92,17 @@ instance MonadMetadata Rules where
92runRules :: Rules a -> Provider -> IO RuleSet
92runRules :: Rules a -> Provider -> IO RuleSet
93runRules rules provider = do
93runRules rules provider = do
94 (_, _, ruleSet) <- runRWST (unRules rules) env emptyRulesState
94 (_, _, ruleSet) <- runRWST (unRules rules) env emptyRulesState
95− case findDuplicate (map fst $ rulesCompilers ruleSet) of
96− Nothing -> return ruleSet
98− "Hakyll.Core.Rules.Internal: two different rules for " ++
99− show id' ++ " exist, bailing out"
96+ -- Ensure compiler uniqueness
97+ let ruleSet' = ruleSet
98+ { rulesCompilers = M.toList $
99+ M.fromListWith (flip const) (rulesCompilers ruleSet)
102 env = RulesRead
104 env = RulesRead
103 { rulesProvider = provider
105 { rulesProvider = provider
104 , rulesMatches = []
106 , rulesMatches = []
105 , rulesVersion = Nothing
107 , rulesVersion = Nothing
109−--------------------------------------------------------------------------------
110−findDuplicate :: Ord a => [a] -> Maybe a
111−findDuplicate = go S.empty
115− | x `S.member` s = Just x
116− | otherwise = go (S.insert x s) xs