on master help sign in
Make Resource Provider keep list of files in a set, rather than as a list, and

use Data.Set.member rather than Prelude.elem to test whether a resource exists. On the site I'm currently working on (where there are ~1000 resources) this makes hakyll about 25% faster.

commit0b7b846a283e4f101c8404f760b65a523e64cf51 authorAndrew Miller <ak.miller@auckland.ac.nz> dateWed 8 Aug 2012, 09:10 (14 years ago) parent961af33
1 file changed+9−3
src/Hakyll/Core/Resource/Provider.hs+9−3
src/Hakyll/Core/Resource/Provider.hs+9−3
@@ -12,6 +12,7 @@
1212--
1313module Hakyll.Core.Resource.Provider
1414 ( ResourceProvider (..)
15+ , resourceList
1516 , makeResourceProvider
1617 , resourceExists
1718 , resourceDigest
@@ -22,6 +23,7 @@ import Control.Applicative ((<$>))
2223import Control.Concurrent (MVar, readMVar, modifyMVar_, newMVar)
2324import Data.Map (Map)
2425import qualified Data.Map as M
26+import qualified Data.Set as S
2527
2628import Data.Time (UTCTime)
2729import qualified Crypto.Hash.MD5 as MD5
@@ -35,7 +37,7 @@ import Hakyll.Core.Resource
3537--
3638data ResourceProvider = ResourceProvider
3739 { -- | A list of all resources this provider is able to provide
38− resourceList :: [Resource]
40+ resourceSet :: S.Set Resource
3941 , -- | Retrieve a certain resource as string
4042 resourceString :: Resource -> IO String
4143 , -- | Retrieve a certain resource as lazy bytestring
@@ -53,12 +55,16 @@ makeResourceProvider :: [Resource] -- ^ Resource list
5355 -> (Resource -> IO LB.ByteString) -- ^ ByteString reader
5456 -> (Resource -> IO UTCTime) -- ^ Time checker
5557 -> IO ResourceProvider -- ^ Resulting provider
56−makeResourceProvider l s b t = ResourceProvider l s b t <$> newMVar M.empty
58+makeResourceProvider l s b t = ResourceProvider (S.fromList l) s b t <$> newMVar M.empty
59+
60+-- | Get the list of all resources
61+resourceList :: ResourceProvider -> [Resource]
62+resourceList = S.toList . resourceSet
5763
5864-- | Check if a given identifier has a resource
5965--
6066resourceExists :: ResourceProvider -> Resource -> Bool
61−resourceExists provider = flip elem $ resourceList provider
67+resourceExists provider = flip S.member $ resourceSet provider
6268
6369-- | Retrieve a digest for a given resource
6470--