diff options
author | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2011-02-25 14:17:30 +0100 |
---|---|---|
committer | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2011-02-25 14:17:30 +0100 |
commit | 730eebe9894e73b7e86a6e5a7546ab5b2484c65d (patch) | |
tree | d3ac3ae4dce7be44096fd442ca444953fdd4a6df | |
parent | b50710ca59b5690965c36036c0171c9cd8d3ac27 (diff) | |
download | hakyll-730eebe9894e73b7e86a6e5a7546ab5b2484c65d.tar.gz |
The dependency analyzer now knows a little more
-rw-r--r-- | .ghci | 2 | ||||
-rw-r--r-- | src/Hakyll.hs | 2 | ||||
-rw-r--r-- | src/Hakyll/Core/Compiler.hs | 2 | ||||
-rw-r--r-- | src/Hakyll/Core/Compiler/Internal.hs | 28 | ||||
-rw-r--r-- | src/Hakyll/Core/Run.hs | 2 |
5 files changed, 28 insertions, 8 deletions
@@ -1 +1 @@ -:set -isrc -itests -idist/build/autogen +:set -isrc -isrc-inotify -itests -idist/build/autogen diff --git a/src/Hakyll.hs b/src/Hakyll.hs index b459507..9a17479 100644 --- a/src/Hakyll.hs +++ b/src/Hakyll.hs @@ -6,6 +6,7 @@ module Hakyll , module Hakyll.Core.Configuration , module Hakyll.Core.Identifier , module Hakyll.Core.Identifier.Pattern + , module Hakyll.Core.ResourceProvider , module Hakyll.Core.Routes , module Hakyll.Core.Rules , module Hakyll.Core.UnixFilter @@ -31,6 +32,7 @@ import Hakyll.Core.CopyFile import Hakyll.Core.Configuration import Hakyll.Core.Identifier import Hakyll.Core.Identifier.Pattern +import Hakyll.Core.ResourceProvider import Hakyll.Core.Routes import Hakyll.Core.Rules import Hakyll.Core.UnixFilter diff --git a/src/Hakyll/Core/Compiler.hs b/src/Hakyll/Core/Compiler.hs index e4922dd..908cb55 100644 --- a/src/Hakyll/Core/Compiler.hs +++ b/src/Hakyll/Core/Compiler.hs @@ -225,7 +225,7 @@ requireA identifier = (id &&& require_ identifier >>>) requireAll_ :: (Binary a, Typeable a, Writable a) => Pattern -> Compiler b [a] -requireAll_ pattern = fromDependencies getDeps >>> fromJob requireAll_' +requireAll_ pattern = fromDependencies (const getDeps) >>> fromJob requireAll_' where getDeps = matches pattern . map unResource . resourceList requireAll_' = const $ CompilerM $ do diff --git a/src/Hakyll/Core/Compiler/Internal.hs b/src/Hakyll/Core/Compiler/Internal.hs index 30a391f..d37c7ef 100644 --- a/src/Hakyll/Core/Compiler/Internal.hs +++ b/src/Hakyll/Core/Compiler/Internal.hs @@ -32,6 +32,15 @@ import Hakyll.Core.Logger -- type Dependencies = Set Identifier +-- | Environment in which the dependency analyzer runs +-- +data DependencyEnvironment = DependencyEnvironment + { -- | Target identifier + dependencyIdentifier :: Identifier + , -- | Resource provider + dependencyResourceProvider :: ResourceProvider + } + -- | Environment in which a compiler runs -- data CompilerEnvironment = CompilerEnvironment @@ -58,7 +67,7 @@ newtype CompilerM a = CompilerM -- | The compiler arrow -- data Compiler a b = Compiler - { compilerDependencies :: Reader ResourceProvider Dependencies + { compilerDependencies :: Reader DependencyEnvironment Dependencies , compilerJob :: a -> CompilerM b } @@ -109,19 +118,28 @@ runCompilerJob compiler identifier provider route store modified logger = } runCompilerDependencies :: Compiler () a + -> Identifier -> ResourceProvider -> Dependencies -runCompilerDependencies compiler = runReader (compilerDependencies compiler) +runCompilerDependencies compiler identifier provider = + runReader (compilerDependencies compiler) env + where + env = DependencyEnvironment + { dependencyIdentifier = identifier + , dependencyResourceProvider = provider + } fromJob :: (a -> CompilerM b) -> Compiler a b fromJob = Compiler (return S.empty) -fromDependencies :: (ResourceProvider -> [Identifier]) +fromDependencies :: (Identifier -> ResourceProvider -> [Identifier]) -> Compiler b b -fromDependencies deps = Compiler (S.fromList . deps <$> ask) return +fromDependencies collectDeps = flip Compiler return $ do + DependencyEnvironment identifier provider <- ask + return $ S.fromList $ collectDeps identifier provider -- | Wait until another compiler has finished before running this compiler -- fromDependency :: Identifier -> Compiler a a -fromDependency = fromDependencies . const . return +fromDependency = fromDependencies . const . const . return diff --git a/src/Hakyll/Core/Run.hs b/src/Hakyll/Core/Run.hs index 42db80a..09864be 100644 --- a/src/Hakyll/Core/Run.hs +++ b/src/Hakyll/Core/Run.hs @@ -118,7 +118,7 @@ addNewCompilers oldCompilers newCompilers = Runtime $ do -- Get all dependencies for the compilers dependencies = flip map compilers $ \(id', compiler) -> - let deps = runCompilerDependencies compiler provider + let deps = runCompilerDependencies compiler id' provider in (id', deps) -- Create a compiler map (Id -> Compiler) |