on master help sign in
Migrate Reader → Reader, State in Run module
commitc6710ac09a5ae0155b83a30497af65be17a44b00 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateSat 8 Jan 2011, 10:31 (16 years ago) parentdf8e221
1 file changed+26−13
src/Hakyll/Core/Run.hs+26−13
src/Hakyll/Core/Run.hs+26−13
@@ -41,27 +41,39 @@ hakyll rules = do
4141 provider <- fileResourceProvider
4242 let ruleSet = runRules rules provider
4343 compilers = rulesCompilers ruleSet
44− runReaderT (unHakyll (addNewCompilers [] compilers)) $
45− env ruleSet provider store
44+
45+ -- Extract the reader/state
46+ reader = unHakyll $ addNewCompilers [] compilers
47+ state' = runReaderT reader $ env ruleSet provider store
48+
49+ evalStateT state' state
4650 where
4751 env ruleSet provider store = HakyllEnvironment
4852 { hakyllRoute = rulesRoute ruleSet
4953 , hakyllResourceProvider = provider
5054 , hakyllStore = store
51− , hakyllModified = S.empty
52− , hakyllObsolete = S.empty
55+ }
56+
57+ state = HakyllState
58+ { hakyllModified = S.empty
59+ , hakyllObsolete = S.empty
60+ , hakyllGraph = mempty
5361 }
5462
5563data HakyllEnvironment = HakyllEnvironment
5664 { hakyllRoute :: Route
5765 , hakyllResourceProvider :: ResourceProvider
5866 , hakyllStore :: Store
59− , hakyllModified :: Set Identifier
60− , hakyllObsolete :: Set Identifier
67+ }
68+
69+data HakyllState = HakyllState
70+ { hakyllModified :: Set Identifier
71+ , hakyllObsolete :: Set Identifier
72+ , hakyllGraph :: DirectedGraph Identifier
6173 }
6274
6375newtype Hakyll a = Hakyll
64− { unHakyll :: ReaderT HakyllEnvironment IO a
76+ { unHakyll :: ReaderT HakyllEnvironment (StateT HakyllState IO) a
6577 } deriving (Functor, Applicative, Monad)
6678
6779-- | Return a set of modified identifiers
@@ -104,9 +116,9 @@ addNewCompilers oldCompilers newCompilers = Hakyll $ do
104116
105117 -- Check which items are up-to-date. This only needs to happen for the new
106118 -- compilers
107− oldModified <- hakyllModified <$> ask
119+ oldModified <- hakyllModified <$> get
108120 newModified <- liftIO $ modified provider store $ map fst newCompilers
109− oldObsolete <- hakyllObsolete <$> ask
121+ oldObsolete <- hakyllObsolete <$> get
110122
111123 let modified' = oldModified `S.union` newModified
112124
@@ -122,12 +134,13 @@ addNewCompilers oldCompilers newCompilers = Hakyll $ do
122134
123135 liftIO $ putStrLn "Adding compilers..."
124136
137+ modify $ updateState modified' obsolete
138+
125139 -- Now run the ordered list of compilers
126− local (updateEnv modified' obsolete) $
127− unHakyll $ runCompilers orderedCompilers
140+ unHakyll $ runCompilers orderedCompilers
128141 where
129142 -- Add the modified information for the new compilers
130− updateEnv modified' obsolete env = env
143+ updateState modified' obsolete state = state
131144 { hakyllModified = modified'
132145 , hakyllObsolete = obsolete
133146 }
@@ -142,7 +155,7 @@ runCompilers ((id', compiler) : compilers) = Hakyll $ do
142155 route' <- hakyllRoute <$> ask
143156 provider <- hakyllResourceProvider <$> ask
144157 store <- hakyllStore <$> ask
145− modified' <- hakyllModified <$> ask
158+ modified' <- hakyllModified <$> get
146159
147160 let -- Determine the URL
148161 url = runRoute route' id'