module AppStorage where import System.Directory(XdgDirectory(..)) import ReadFileF import WriteFile import HbcUtils(apSnd) import CompOps import NullF import Spops appStorageF :: (Read a,Show a) => String -> a -> F a a appStorageF key d = either (const d) (maybe d id . readM) . snd >^=< startupF [key] (readXdgFileF XdgData) >=^^< nullSP >==< writeXdgFileF XdgData >=^< (,) key . show readM x = case reads x of [(x,s)] | lex s == [("","")] -> Just x _ -> Nothing