Cache data
This commit is contained in:
parent
7f0b3a166a
commit
f06db720ea
21
Main.hs
21
Main.hs
|
@ -1,5 +1,6 @@
|
|||
{-# language TypeApplications #-}
|
||||
{-# language DataKinds #-}
|
||||
{-# language LambdaCase #-}
|
||||
{-# options_ghc -Wall -Werror #-}
|
||||
module Main (main) where
|
||||
|
||||
|
@ -13,6 +14,7 @@ import qualified Data.ByteString.Lazy as ByteString
|
|||
import System.Directory
|
||||
import System.FilePath
|
||||
import System.Environment
|
||||
import Control.Monad (guard)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
|
@ -25,24 +27,29 @@ main = do
|
|||
cachedLoad :: IO (Bloom Size String)
|
||||
cachedLoad = do
|
||||
cache <- getCachePath
|
||||
cacheExists <- doesFileExist cache
|
||||
if cacheExists
|
||||
then load cache
|
||||
else do
|
||||
load cache >>= \case
|
||||
Nothing -> do
|
||||
b <- build
|
||||
ByteString.writeFile cache $ Binary.encode b
|
||||
pure b
|
||||
Just a -> pure a
|
||||
|
||||
getCachePath :: IO FilePath
|
||||
getCachePath = (</> "bloom-spell/words.bin") <$> getEnv "XDG_DATA_HOME"
|
||||
|
||||
load :: FilePath -> IO (Bloom Size String)
|
||||
load p = Binary.decode @(Bloom Size _) <$> ByteString.readFile p
|
||||
load :: FilePath -> IO (Maybe (Bloom Size String))
|
||||
load p = do
|
||||
cacheExists <- doesFileExist p
|
||||
guard cacheExists
|
||||
s <- ByteString.readFile p
|
||||
case Binary.decodeOrFail @(Bloom Size _) s of
|
||||
Left{} -> pure Nothing
|
||||
Right (_, _, a) -> pure $ pure a
|
||||
|
||||
build :: IO (Bloom Size String)
|
||||
build = fromList @(Bloom Size _) . lines <$> readFile dict
|
||||
|
||||
type Size = 0xfffff
|
||||
type Size = 0xffff0
|
||||
|
||||
dict :: FilePath
|
||||
dict = "/usr/share/dict/words"
|
||||
|
|
Loading…
Reference in a new issue