Update a configuration file: Difference between revisions

→‎{{header|Haskell}}: Updated reading in order to fulfill the task
mNo edit summary
(→‎{{header|Haskell}}: Updated reading in order to fulfill the task)
Line 872:
EmptyLine -> ""
 
instance Read Entry where
readsPrec _ s = [(interprete (clean " " s), "")]
where
clean chs = dropWhile (`elem` chs)
interprete ('#' : text) = Comment text
interprete (';' : f)= flag (clean " ;" f) False
interprete entry = case words entry of
[] -> EmptyLine
";" : field[f] -> Flag (toUpper <$> unwordsflag field)f FalseTrue
[field] f : v -> Flagfield f (toUpperunwords <$> fieldv) True
field :f value ->= Field (toUpper <$> fieldf) (unwords value)</lang>
flag f = Flag (toUpper <$> f)</lang>
 
Getting and setting fields in INI data:
 
<lang Haskell>fieldIssplitOn f entryentries = case break (toUpper <$>eqv f) ==entries (toUpper <$> field entry)of
(lst, []) -> (lst, [])
(lst, _:post) -> (lst, post)
where
eqv f entry = (toUpper <$> f) == (toUpper <$> field entry)
field (Field f _) = f
field (Flag f _) = f
field _ = ""
 
splitOn f entries = case break (fieldIs f) entries of
(lst, []) -> (lst, [])
(lst, _:post) -> (lst, post)
 
getValue :: String -> INI -> Maybe String
getValue f ini = find (fieldIs f) (entries ini) >>= value
where value (Field _ v) = Just v
value _ = Nothing
 
getFlag :: String -> INI -> Maybe Bool
getFlag f ini = find (fieldIs f) (entries ini) >>= value
where value (Flag _ v) = Just v
value _ = Nothing
 
setValue :: String -> String -> INI -> INI
Anonymous user