From 4df74583627766e6cd7843c205f566a5288efef7 Mon Sep 17 00:00:00 2001 From: Garrett Mills Date: Thu, 30 Sep 2021 13:39:47 -0500 Subject: [PATCH] Add fenv starter --- fenv.hs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 fenv.hs diff --git a/fenv.hs b/fenv.hs new file mode 100644 index 0000000..d0413fb --- /dev/null +++ b/fenv.hs @@ -0,0 +1,53 @@ +import System.Environment +import System.Directory +import System.IO +import Data.List + +type EnvKey = String +type EnvValue = String + +data EnvFile = + End + | Entry EnvKey EnvValue EnvFile + deriving (Show,Eq,Read) + +main = do + let f = (Entry "foo" "bar" End) + putStrLn (show f) + +setEntry :: EnvFile -> EnvKey -> EnvValue -> EnvFile +setEntry env key value = let env'=(removeEntry env key) in + (Entry key value env') + +removeEntry :: EnvFile -> EnvKey -> EnvFile +removeEntry End _ = End +removeEntry (Entry entryKey entryValue rest) key = if entryKey==key + then rest + else (Entry entryKey entryValue (removeEntry rest key)) + +getEntry :: EnvFile -> EnvKey -> Maybe EnvValue +getEntry End _ = Nothing +getEntry (Entry entryKey entryValue rest) key = if entryKey==key + then return entryValue + else (getEntry rest key) + +replaceEnvFile :: EnvFile -> IO () +replaceEnvFile env = do + path <- getEnvFilePath + (tempName, tempHandle) <- openTempFile "/tmp" ".fenv" + hPutStr tempHandle (show env) + hClose tempHandle + removeFile path + renameFile tempName path + +getEnvFile :: IO EnvFile +getEnvFile = do + path <- getEnvFilePath + contents <- readFile path + return $ read contents + +getEnvFilePath :: IO FilePath +getEnvFilePath = do + home <- getHomeDirectory + return (home ++ "/.fenv") +