module History.Cache (cached) where import Data.Binary (Binary, decodeFileOrFail, encodeFile) import Data.Text qualified as T import System.Directory (createDirectoryIfMissing, doesFileExist, getCurrentDirectory) cached :: Binary a => T.Text -> (T.Text -> IO a) -> IO a cached hash func = do -- FIXME Cache inside Git root -- -- The cache location should not be dependant on the current directory, but -- should be placed alongside the `.git` directory. cwd <- getCurrentDirectory createDirectoryIfMissing True (cwd ++ "/.anissue") let file = (cwd ++ "/.anissue/" ++ T.unpack hash) doesFileExist file >>= \case True -> decodeFileOrFail file >>= \case Left _ -> generate file Right blob -> pure blob False -> generate file where generate file = do blob <- func hash encodeFile file blob pure blob