+marshalStringPairs :: [(String, String)] -> String
+marshalStringPairs = joinWith "\n" . map marshalPair'
+ where
+ marshalPair' :: (String, String) -> String
+ marshalPair' (a, b) = a ++ " " ++ b
+
+
+unmarshalStringPairs :: String -> [(String, String)]
+unmarshalStringPairs = catMaybes . map unmarshalPair' . lines
+ where
+ unmarshalPair' :: String -> Maybe (String, String)
+ unmarshalPair' s = case break (/= ' ') s of
+ (a, ' ':b) -> Just (a, b)
+ _ -> Nothing
+
+