@@ -9,6 +9,7 @@ module Hakyll.Core.Store
99 , new
1010 , set
1111 , get
12+ , isMember
1213 , delete
1314 , hash
1415 ) where
@@ -100,6 +101,16 @@ cacheLookup (Store _ (Just lru)) key = do
100101 Nothing -> WrongType (typeOf (undefined :: a)) (typeOf x)
101102
102103
104+--------------------------------------------------------------------------------
105+cacheIsMember :: Store -> String -> IO Bool
106+cacheIsMember (Store _ Nothing) _ = return False
107+cacheIsMember (Store _ (Just lru)) key = do
108+ res <- Lru.lookup key lru
109+ case res of
110+ Nothing -> return False
111+ _ -> return True
112+
113+
103114--------------------------------------------------------------------------------
104115-- | Auxiliary: delete an item from the in-memory cache
105116cacheDelete :: Store -> String -> IO ()
@@ -151,6 +162,16 @@ get store identifier = do
151162 return $ decode lbs
152163
153164
165+--------------------------------------------------------------------------------
166+-- | Strict function
167+isMember :: Store -> [String] -> IO Bool
168+isMember store identifier = do
169+ inCache <- cacheIsMember store key
170+ if inCache then return True else doesFileExist path
171+ where
172+ key = hash identifier
173+ path = storeDirectory store </> key
174+
154175--------------------------------------------------------------------------------
155176-- | Delete an item
156177delete :: Store -> [String] -> IO ()