summaryrefslogtreecommitdiff
path: root/src/Text/Hakyll/Internal/Cache.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Hakyll/Internal/Cache.hs')
-rw-r--r--src/Text/Hakyll/Internal/Cache.hs14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/Text/Hakyll/Internal/Cache.hs b/src/Text/Hakyll/Internal/Cache.hs
index d28f849..0deb5f4 100644
--- a/src/Text/Hakyll/Internal/Cache.hs
+++ b/src/Text/Hakyll/Internal/Cache.hs
@@ -1,8 +1,10 @@
module Text.Hakyll.Internal.Cache
( storeInCache
, getFromCache
+ , isCacheMoreRecent
) where
+import Control.Monad ((<=<))
import Control.Monad.Reader (liftIO)
import Text.Hakyll.Hakyll (Hakyll)
import Text.Hakyll.File
@@ -20,9 +22,9 @@ storeInCache value path = do
-- cache. This function performs a timestamp check on the filepath and the
-- filepath in the cache, and only returns the cached value when it is still
-- up-to-date.
-getFromCache :: (Binary a) => FilePath -> Hakyll (Maybe a)
-getFromCache path = do
- cachePath <- toCache path
- valid <- isMoreRecent cachePath [path]
- if valid then liftIO (decodeFile cachePath) >>= return . Just
- else return Nothing
+getFromCache :: (Binary a) => FilePath -> Hakyll a
+getFromCache = liftIO . decodeFile <=< toCache
+
+-- | Check if a file in the cache is more recent than a number of other files.
+isCacheMoreRecent :: FilePath -> [FilePath] -> Hakyll Bool
+isCacheMoreRecent file depends = toCache file >>= flip isMoreRecent depends