diff options
| author | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-11-22 13:38:28 +0100 |
|---|---|---|
| committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-11-22 13:38:28 +0100 |
| commit | 82d5210f25d560e9488ab14f243a2cad9ad906a9 (patch) | |
| tree | f9b32638301aed53f4c4ec546203b88ba04bbba4 /src/Hakyll/Core/Compiler | |
| parent | aa1762f78ee5d0c5700d43a1e0363f96c4cfe617 (diff) | |
| download | hakyll-82d5210f25d560e9488ab14f243a2cad9ad906a9.tar.gz | |
Add MonadMetadata and instances
Diffstat (limited to 'src/Hakyll/Core/Compiler')
| -rw-r--r-- | src/Hakyll/Core/Compiler/Internal.hs | 33 | ||||
| -rw-r--r-- | src/Hakyll/Core/Compiler/Require.hs | 5 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/Hakyll/Core/Compiler/Internal.hs b/src/Hakyll/Core/Compiler/Internal.hs index 89227ef..981ddda 100644 --- a/src/Hakyll/Core/Compiler/Internal.hs +++ b/src/Hakyll/Core/Compiler/Internal.hs @@ -25,16 +25,18 @@ module Hakyll.Core.Compiler.Internal -------------------------------------------------------------------------------- -import Control.Applicative (Alternative (..), - Applicative (..)) -import Control.Exception (SomeException, handle) -import Data.Monoid (Monoid (..)) +import Control.Applicative (Alternative (..), + Applicative (..), (<$>)) +import Control.Exception (SomeException, handle) +import Data.Monoid (Monoid (..)) -------------------------------------------------------------------------------- import Hakyll.Core.Dependencies import Hakyll.Core.Identifier +import Hakyll.Core.Identifier.Pattern import Hakyll.Core.Logger +import Hakyll.Core.Metadata import Hakyll.Core.Provider import Hakyll.Core.Routes import Hakyll.Core.Store @@ -128,6 +130,12 @@ instance Applicative Compiler where -------------------------------------------------------------------------------- +instance MonadMetadata Compiler where + getMetadata = compilerGetMetadata + getMatches = compilerGetMatches + + +-------------------------------------------------------------------------------- runCompiler :: Compiler a -> CompilerRead -> IO (CompilerResult a) runCompiler compiler read' = handle handler $ unCompiler compiler read' where @@ -195,3 +203,20 @@ compilerTellDependencies ds = compilerTell mempty {compilerDependencies = ds} compilerTellCacheHits :: Int -> Compiler () compilerTellCacheHits ch = compilerTell mempty {compilerCacheHits = ch} {-# INLINE compilerTellCacheHits #-} + + +-------------------------------------------------------------------------------- +compilerGetMetadata :: Identifier -> Compiler Metadata +compilerGetMetadata identifier = do + provider <- compilerProvider <$> compilerAsk + compilerTellDependencies [IdentifierDependency identifier] + compilerUnsafeIO $ resourceMetadata provider identifier + + +-------------------------------------------------------------------------------- +compilerGetMatches :: Pattern -> Compiler [Identifier] +compilerGetMatches pattern = do + universe <- compilerUniverse <$> compilerAsk + let matching = filterMatches pattern universe + compilerTellDependencies [PatternDependency pattern matching] + return matching diff --git a/src/Hakyll/Core/Compiler/Require.hs b/src/Hakyll/Core/Compiler/Require.hs index a7c47ce..b9e0cc7 100644 --- a/src/Hakyll/Core/Compiler/Require.hs +++ b/src/Hakyll/Core/Compiler/Require.hs @@ -19,6 +19,7 @@ import Hakyll.Core.Dependencies import Hakyll.Core.Identifier import Hakyll.Core.Identifier.Pattern import Hakyll.Core.Item +import Hakyll.Core.Metadata import Hakyll.Core.Store (Store) import qualified Hakyll.Core.Store as Store @@ -59,9 +60,7 @@ requireBody = fmap itemBody . require -------------------------------------------------------------------------------- requireAll :: (Binary a, Typeable a) => Pattern -> Compiler [Item a] requireAll pattern = do - universe <- compilerUniverse <$> compilerAsk - let matching = filterMatches pattern universe - compilerTellDependencies [PatternDependency pattern matching] + matching <- getMatches pattern mapM require matching |
