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 :: forall a. (Read a, Show a) => String -> a -> F a a
appStorageF String
key a
d =
  forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (forall a b. a -> b -> a
const a
d) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe a
d forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a}. Read a => String -> Maybe a
readM) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd
  forall a b e. (a -> b) -> F e a -> F e b
>^=< forall {hi} {ho}. [hi] -> F hi ho -> F hi ho
startupF [String
key] (XdgDirectory -> F String (String, Either IOError String)
readXdgFileF XdgDirectory
XdgData)
  forall c d e. F c d -> SP e c -> F e d
>=^^< forall a b. SP a b
nullSP
  forall {a1} {b} {a2}. F a1 b -> F a2 a1 -> F a2 b
>==< XdgDirectory -> F (String, String) (String, Either IOError ())
writeXdgFileF XdgDirectory
XdgData
  forall c d e. F c d -> (e -> c) -> F e d
>=^< (,) String
key forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show

readM :: String -> Maybe a
readM String
x = case forall a. Read a => ReadS a
reads String
x of
            [(a
x,String
s)] | ReadS String
lex String
s forall a. Eq a => a -> a -> Bool
== [(String
"",String
"")] -> forall a. a -> Maybe a
Just a
x
            [(a, String)]
_ -> forall a. Maybe a
Nothing