on master help sign in
Refactor resource provider creation
edcd315Jasper Van der Jeugt
src/Hakyll/Core/Resource/Provider.hs+11−1
@@ -12,12 +12,14 @@
12--
12--
13module Hakyll.Core.Resource.Provider
13module Hakyll.Core.Resource.Provider
14 ( ResourceProvider (..)
14 ( ResourceProvider (..)
15+ , makeResourceProvider
15 , resourceExists
16 , resourceExists
16 , resourceDigest
17 , resourceDigest
17 , resourceModified
18 , resourceModified
18 ) where
19 ) where
19
20
21+import Control.Applicative ((<$>))
20−import Control.Concurrent (MVar, readMVar, modifyMVar_)
22+import Control.Concurrent (MVar, readMVar, modifyMVar_, newMVar)
21import Control.Monad ((<=<))
23import Control.Monad ((<=<))
22import Data.Word (Word8)
24import Data.Word (Word8)
23import Data.Map (Map)
25import Data.Map (Map)
@@ -43,6 +45,14 @@ data ResourceProvider = ResourceProvider
43 resourceModifiedCache :: MVar (Map Resource Bool)
45 resourceModifiedCache :: MVar (Map Resource Bool)
44 }
46 }
45
47
48+-- | Create a resource provider
49+--
50+makeResourceProvider :: [Resource] -- ^ Resource list
51+ -> (Resource -> IO String) -- ^ String reader
52+ -> (Resource -> IO LB.ByteString) -- ^ ByteString reader
53+ -> IO ResourceProvider -- ^ Resulting provider
54+makeResourceProvider l s b = ResourceProvider l s b <$> newMVar M.empty
55+
46-- | Check if a given identifier has a resource
56-- | Check if a given identifier has a resource
47--
57--
48resourceExists :: ResourceProvider -> Resource -> Bool
58resourceExists :: ResourceProvider -> Resource -> Bool
src/Hakyll/Core/Resource/Provider/File.hs+3−14
@@ -5,8 +5,6 @@ module Hakyll.Core.Resource.Provider.File
5 ) where
5 ) where
6
6
7import Control.Applicative ((<$>))
7import Control.Applicative ((<$>))
8−import Control.Concurrent (newMVar)
9−import qualified Data.Map as M
10
8
11import qualified Data.ByteString.Lazy as LB
9import qualified Data.ByteString.Lazy as LB
12
10
@@ -20,16 +18,7 @@ import Hakyll.Core.Configuration
20fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
18fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
21fileResourceProvider configuration = do
19fileResourceProvider configuration = do
22 -- Retrieve a list of paths
20 -- Retrieve a list of paths
23− list <- filter (not . ignoreFile configuration) <$>
21+ list <- map Resource . filter (not . ignoreFile configuration) <$>
24 getRecursiveContents False "."
22 getRecursiveContents False "."
25−
26− -- MVar for the cache
27− mvar <- newMVar M.empty
28−
29− -- Construct a resource provider
30− return ResourceProvider
31− { resourceList = map Resource list
32− , resourceString = readFile . unResource
23+ makeResourceProvider list (readFile . unResource)
33− , resourceLazyByteString = LB.readFile . unResource
24+ (LB.readFile . unResource)
34− , resourceModifiedCache = mvar
35− }