@@ -16,7 +16,6 @@ import Control.Applicative (Applicative, (<$>))
1616import Control.Monad.Reader (ask)
1717import Control.Monad.RWS (RWST, runRWST)
1818import Control.Monad.Trans (liftIO)
19−import Data.Map (Map)
2019import qualified Data.Map as M
2120import Data.Monoid (Monoid, mappend, mempty)
2221import Data.Set (Set)
@@ -98,26 +97,15 @@ runRules rules provider = do
9897 (_, _, ruleSet) <- runRWST (unRules rules) env emptyRulesState
9998
10099 -- Ensure compiler uniqueness
101− uniqueCompilers <- case fromListUnique (rulesCompilers ruleSet) of
102− Right m -> return m
103− Left id' -> error $
104− "Hakyll.Core.Rules.Internal.runRules: duplicate compiler for " ++
105− show id'
100+ let ruleSet' = ruleSet
101+ { rulesCompilers = M.toList $
102+ M.fromListWith (flip const) (rulesCompilers ruleSet)
103+ }
106104
107− return ruleSet {rulesCompilers = M.toList uniqueCompilers}
105+ return ruleSet'
108106 where
109107 env = RulesRead
110108 { rulesProvider = provider
111109 , rulesMatches = []
112110 , rulesVersion = Nothing
113111 }
114−
115−
116−--------------------------------------------------------------------------------
117−fromListUnique :: Ord k => [(k, v)] -> Either k (Map k v)
118−fromListUnique = go M.empty
119− where
120− go m [] = Right m
121− go m ((k, v) : zs) = case M.lookup k m of
122− Nothing -> go (M.insert k v m) zs
123− Just _ -> Left k