Jump to content

Update a configuration file: Difference between revisions

(→‎{{header|Haskell}}: Updated reading in order to fulfill the task)
Line 887:
Getting and setting fields in INI data:
 
<lang Haskell>splitOnsetValue f:: entriesString =-> caseString break-> (eqvINI f)-> entries ofINI
setValue f v ini = iniINI {entries. =replaceOn prev(eqv ++f) [(Field f v]) ++. post}entries
(lst, []) -> (lst, [])
(lst, _:post) -> (lst, post)
where
eqv f entry = (toUpper <$> f) == (toUpper <$> field entry)
field (Field f _) = f
field (Flag f _) = f
field _ = ""
 
setValue :: String -> String -> INI -> INI
setValue f v ini = ini {entries = prev ++ [Field f v] ++ post}
where (prev,post) = splitOn f (entries ini)
 
setFlag :: String -> Bool -> INI -> INI
setFlag f v ini = iniINI {entries. =replaceOn prev(eqv ++f) [(Flag f v]) ++. post}entries
where (prev,post) = splitOn f (entries ini)
 
enable f = setFlag f True
disable f = setFlag f False</lang>
 
eqv f entry = (toUpper <$> f) == (toUpper <$> field entry)
where field (Field f _) = f
field (Flag f _) = f
field _ = ""
 
replaceOn p x lst = prev ++ x : post
where
(prev,post) = case break p lst of
(lst, []) -> (lst, [])
(lst, _:postxs) -> (lst, postxs)</lang>
 
IO stuff:
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.