on master help sign in
Targets have access to the store
e07014bJasper Van der Jeugt
src/Hakyll/Core/Run.hs+7−6
@@ -3,7 +3,7 @@
3module Hakyll.Core.Run where
3module Hakyll.Core.Run where
4
4
5import Control.Arrow ((&&&))
5import Control.Arrow ((&&&))
6−import Control.Monad (msum, foldM, forM, forM_)
6+import Control.Monad (foldM, forM_)
7import qualified Data.Map as M
7import qualified Data.Map as M
8
8
9import Hakyll.Core.Route
9import Hakyll.Core.Route
@@ -12,18 +12,19 @@ import Hakyll.Core.ResourceProvider
12import Hakyll.Core.ResourceProvider.FileResourceProvider
12import Hakyll.Core.ResourceProvider.FileResourceProvider
13import Hakyll.Core.Rules
13import Hakyll.Core.Rules
14import Hakyll.Core.Target
14import Hakyll.Core.Target
15−import Hakyll.Core.Identifier
16import Hakyll.Core.DirectedGraph
15import Hakyll.Core.DirectedGraph
17import Hakyll.Core.DirectedGraph.DependencySolver
16import Hakyll.Core.DirectedGraph.DependencySolver
18import Hakyll.Core.Writable
17import Hakyll.Core.Writable
18+import Hakyll.Core.Store
19
19
20hakyll :: Writable a => Rules a -> IO ()
20hakyll :: Writable a => Rules a -> IO ()
21hakyll rules = do
21hakyll rules = do
22+ store <- makeStore "_store"
22 provider <- fileResourceProvider
23 provider <- fileResourceProvider
23− hakyllWith rules provider
24+ hakyllWith rules provider store
24
25
25−hakyllWith :: Writable a => Rules a -> ResourceProvider -> IO ()
26+hakyllWith :: Writable a => Rules a -> ResourceProvider -> Store -> IO ()
26−hakyllWith rules provider = do
27+hakyllWith rules provider store = do
27 let -- Get the rule set
28 let -- Get the rule set
28 ruleSet = runRules rules provider
29 ruleSet = runRules rules provider
29
30
@@ -63,6 +64,6 @@ hakyllWith rules provider = do
63 putStrLn "DONE."
64 putStrLn "DONE."
64 where
65 where
65 addTarget map' (id', targ) = do
66 addTarget map' (id', targ) = do
66− result <- runTarget targ id' (map' M.!) provider
67+ result <- runTarget targ id' (map' M.!) provider store
67 putStrLn $ "Generated target: " ++ show id'
68 putStrLn $ "Generated target: " ++ show id'
68 return $ M.insert id' result map'
69 return $ M.insert id' result map'
src/Hakyll/Core/Target/Internal.hs+5−1
@@ -15,6 +15,7 @@ import Control.Monad.Reader (ReaderT, runReaderT)
15
15
16import Hakyll.Core.Identifier
16import Hakyll.Core.Identifier
17import Hakyll.Core.ResourceProvider
17import Hakyll.Core.ResourceProvider
18+import Hakyll.Core.Store
18
19
19-- | A lookup with which we can get dependencies
20-- | A lookup with which we can get dependencies
20--
21--
@@ -26,6 +27,7 @@ data TargetEnvironment a = TargetEnvironment
26 { targetIdentifier :: Identifier -- ^ Identifier
27 { targetIdentifier :: Identifier -- ^ Identifier
27 , targetDependencyLookup :: DependencyLookup a -- ^ Dependency lookup
28 , targetDependencyLookup :: DependencyLookup a -- ^ Dependency lookup
28 , targetResourceProvider :: ResourceProvider -- ^ To get resources
29 , targetResourceProvider :: ResourceProvider -- ^ To get resources
30+ , targetStore :: Store -- ^ Store for caching
29 }
31 }
30
32
31-- | Monad for targets. In this monad, the user can compose targets and describe
33-- | Monad for targets. In this monad, the user can compose targets and describe
@@ -45,11 +47,13 @@ runTarget :: Target a
45 -> Identifier
47 -> Identifier
46 -> DependencyLookup a
48 -> DependencyLookup a
47 -> ResourceProvider
49 -> ResourceProvider
50+ -> Store
48 -> IO a
51 -> IO a
49−runTarget target id' lookup' provider = runReaderT (unTargetM target) env
52+runTarget target id' lookup' provider store = runReaderT (unTargetM target) env
50 where
53 where
51 env = TargetEnvironment
54 env = TargetEnvironment
52 { targetIdentifier = id'
55 { targetIdentifier = id'
53 , targetDependencyLookup = lookup'
56 , targetDependencyLookup = lookup'
54 , targetResourceProvider = provider
57 , targetResourceProvider = provider
58+ , targetStore = store
55 }
59 }