diff options
author | Jasper Van der Jeugt <m@jaspervdj.be> | 2013-02-14 10:08:21 +0100 |
---|---|---|
committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2013-02-14 10:08:21 +0100 |
commit | 61dcb5f454fcbd912b09839021f4c79ca60973fe (patch) | |
tree | 37b39b20bc3f5325d2c13939c03ce286162eb354 /src/Hakyll/Core/Rules/Internal.hs | |
parent | 2912fcd521d0d9fbe93dae37783f5f379893ddb1 (diff) | |
parent | 02a92d54cdee8299aac0f55cbe4a930ac5060d20 (diff) | |
download | hakyll-61dcb5f454fcbd912b09839021f4c79ca60973fe.tar.gz |
Merge branch 'master' into dev-metadata-route
Diffstat (limited to 'src/Hakyll/Core/Rules/Internal.hs')
-rw-r--r-- | src/Hakyll/Core/Rules/Internal.hs | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/Hakyll/Core/Rules/Internal.hs b/src/Hakyll/Core/Rules/Internal.hs index 10ca919..09d9b1e 100644 --- a/src/Hakyll/Core/Rules/Internal.hs +++ b/src/Hakyll/Core/Rules/Internal.hs @@ -16,9 +16,9 @@ import Control.Applicative (Applicative, (<$>)) import Control.Monad.Reader (ask) import Control.Monad.RWS (RWST, runRWST) import Control.Monad.Trans (liftIO) -import qualified Data.Map as M import Data.Monoid (Monoid, mappend, mempty) import Data.Set (Set) +import qualified Data.Set as S -------------------------------------------------------------------------------- @@ -92,7 +92,12 @@ instance MonadMetadata Rules where runRules :: Rules a -> Provider -> IO RuleSet runRules rules provider = do (_, _, ruleSet) <- runRWST (unRules rules) env emptyRulesState - return $ nubCompilers ruleSet + case findDuplicate (map fst $ rulesCompilers ruleSet) of + Nothing -> return ruleSet + Just id' -> error $ + "Hakyll.Core.Rules.Internal: two different rules for " ++ + show id' ++ " exist, bailing out" + where env = RulesRead { rulesProvider = provider @@ -102,9 +107,10 @@ runRules rules provider = do -------------------------------------------------------------------------------- --- | Remove duplicate compilers from the 'RuleSet'. When two compilers match an --- item, we prefer the first one -nubCompilers :: RuleSet -> RuleSet -nubCompilers set = set {rulesCompilers = nubCompilers' (rulesCompilers set)} +findDuplicate :: Ord a => [a] -> Maybe a +findDuplicate = go S.empty where - nubCompilers' = M.toList . M.fromListWith (flip const) + go _ [] = Nothing + go s (x : xs) + | x `S.member` s = Just x + | otherwise = go (S.insert x s) xs |