blob: d28f8495f7d4609d47ebd55f1fa4ff03bd1140ec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
module Text.Hakyll.Internal.Cache
( storeInCache
, getFromCache
) where
import Control.Monad.Reader (liftIO)
import Text.Hakyll.Hakyll (Hakyll)
import Text.Hakyll.File
import Data.Binary
-- | We can store all datatypes instantiating @Binary@ to the cache. The cache
-- directory is specified by the @HakyllConfiguration@, usually @_cache@.
storeInCache :: (Binary a) => a -> FilePath -> Hakyll ()
storeInCache value path = do
cachePath <- toCache path
makeDirectories cachePath
liftIO $ encodeFile cachePath value
-- | Get a value from the cache. The filepath given should not be located in the
-- 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
|