@@ -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 -> Bool
106+cacheIsMember (Store _ Nothing) _ = False
107+cacheIsMember (Store _ (Just lru)) key =
108+ let res = Lru.lookup key lru in
109+ case Just res of
110+ Nothing -> False
111+ _ -> True
112+
113+
103114--------------------------------------------------------------------------------
104115-- | Auxiliary: delete an item from the in-memory cache
105116cacheDelete :: Store -> String -> IO ()
@@ -151,6 +162,17 @@ get store identifier = do
151162 return $ decode lbs
152163
153164
165+--------------------------------------------------------------------------------
166+-- | Strict function
167+isMember :: Store -> [String] -> IO Bool
168+isMember store identifier
169+ | cacheIsMember store key = return True
170+ | otherwise = doesFileExist path
171+
172+ where
173+ key = hash identifier
174+ path = storeDirectory store </> key
175+
154176--------------------------------------------------------------------------------
155177-- | Delete an item
156178delete :: Store -> [String] -> IO ()