@@ -32,6 +32,15 @@ import Hakyll.Core.Logger
33type Dependencies = Set Identifier
33type Dependencies = Set Identifier
35+-- | Environment in which the dependency analyzer runs
37+data DependencyEnvironment = DependencyEnvironment
38+ { -- | Target identifier
39+ dependencyIdentifier :: Identifier
40+ , -- | Resource provider
41+ dependencyResourceProvider :: ResourceProvider
35-- | Environment in which a compiler runs
44-- | Environment in which a compiler runs
37data CompilerEnvironment = CompilerEnvironment
46data CompilerEnvironment = CompilerEnvironment
@@ -58,7 +67,7 @@ newtype CompilerM a = CompilerM
58-- | The compiler arrow
67-- | The compiler arrow
60data Compiler a b = Compiler
69data Compiler a b = Compiler
61− { compilerDependencies :: Reader ResourceProvider Dependencies
70+ { compilerDependencies :: Reader DependencyEnvironment Dependencies
62 , compilerJob :: a -> CompilerM b
71 , compilerJob :: a -> CompilerM b
@@ -109,19 +118,28 @@ runCompilerJob compiler identifier provider route store modified logger =
111runCompilerDependencies :: Compiler () a
120runCompilerDependencies :: Compiler () a
112 -> ResourceProvider
122 -> ResourceProvider
113 -> Dependencies
123 -> Dependencies
124+runCompilerDependencies compiler identifier provider =
114−runCompilerDependencies compiler = runReader (compilerDependencies compiler)
125+ runReader (compilerDependencies compiler) env
127+ env = DependencyEnvironment
128+ { dependencyIdentifier = identifier
129+ , dependencyResourceProvider = provider
116fromJob :: (a -> CompilerM b)
132fromJob :: (a -> CompilerM b)
117 -> Compiler a b
133 -> Compiler a b
118fromJob = Compiler (return S.empty)
134fromJob = Compiler (return S.empty)
120−fromDependencies :: (ResourceProvider -> [Identifier])
136+fromDependencies :: (Identifier -> ResourceProvider -> [Identifier])
121 -> Compiler b b
137 -> Compiler b b
122−fromDependencies deps = Compiler (S.fromList . deps <$> ask) return
138+fromDependencies collectDeps = flip Compiler return $ do
139+ DependencyEnvironment identifier provider <- ask
140+ return $ S.fromList $ collectDeps identifier provider
124-- | Wait until another compiler has finished before running this compiler
142-- | Wait until another compiler has finished before running this compiler
126fromDependency :: Identifier -> Compiler a a
144fromDependency :: Identifier -> Compiler a a
127−fromDependency = fromDependencies . const . return
145+fromDependency = fromDependencies . const . const . return