on master help sign in
Add `resources` function to rules DSL
5327e88Jasper Van der Jeugt
src/Hakyll/Core/Rules.hs+16−10
@@ -23,6 +23,7 @@ module Hakyll.Core.Rules
23 , compile
23 , compile
24 , create
24 , create
25 , route
25 , route
26+ , resources
26 , metaCompile
27 , metaCompile
27 , metaCompileWith
28 , metaCompileWith
28 ) where
29 ) where
@@ -72,8 +73,8 @@ tellCompilers compilers = RulesM $ do
72--
73--
73tellResources :: [Resource]
74tellResources :: [Resource]
74 -> Rules
75 -> Rules
75−tellResources resources = RulesM $ tell $
76+tellResources resources' = RulesM $ tell $
76− RuleSet mempty mempty $ S.fromList resources
77+ RuleSet mempty mempty $ S.fromList resources'
77
78
78-- | Only compile/route items satisfying the given predicate
79-- | Only compile/route items satisfying the given predicate
79--
80--
@@ -128,14 +129,11 @@ group g = RulesM . local setGroup' . unRulesM
128--
129--
129compile :: (Binary a, Typeable a, Writable a)
130compile :: (Binary a, Typeable a, Writable a)
130 => Compiler Resource a -> Rules
131 => Compiler Resource a -> Rules
131−compile compiler = RulesM $ do
132+compile compiler = do
132− pattern <- rulesPattern <$> ask
133+ ids <- resources
133− provider <- rulesResourceProvider <$> ask
134− let ids = filterMatches pattern $ map toIdentifier $ resourceList provider
135− unRulesM $ do
136− tellCompilers $ flip map ids $ \identifier ->
134+ tellCompilers $ flip map ids $ \identifier ->
137− (identifier, constA (fromIdentifier identifier) >>> compiler)
135+ (identifier, constA (fromIdentifier identifier) >>> compiler)
138− tellResources $ map fromIdentifier ids
136+ tellResources $ map fromIdentifier ids
139
137
140-- | Add a compilation rule
138-- | Add a compilation rule
141--
139--
@@ -160,6 +158,14 @@ route route' = RulesM $ do
160 group' <- rulesGroup <$> ask
158 group' <- rulesGroup <$> ask
161 unRulesM $ tellRoute $ matchRoute (pattern `mappend` inGroup group') route'
159 unRulesM $ tellRoute $ matchRoute (pattern `mappend` inGroup group') route'
162
160
161+-- | Get a list of resources matching the current pattern
162+--
163+resources :: RulesM [Identifier]
164+resources = RulesM $ do
165+ pattern <- rulesPattern <$> ask
166+ provider <- rulesResourceProvider <$> ask
167+ return $ filterMatches pattern $ map toIdentifier $ resourceList provider
168+
163-- | Apart from regular compilers, one is also able to specify metacompilers.
169-- | Apart from regular compilers, one is also able to specify metacompilers.
164-- Metacompilers are a special class of compilers: they are compilers which
170-- Metacompilers are a special class of compilers: they are compilers which
165-- produce other compilers.
171-- produce other compilers.