From e7489043d8bf2a406a910adcb93280e83d6d2faa Mon Sep 17 00:00:00 2001 From: defanor Date: Wed, 20 Dec 2017 00:22:25 +0300 Subject: Prepare for IO DSV functions operate on individual lines now, unit type gets printed/parsed as nothing (handier for argument parsing to set '()' when there's none, and that's what it should be anyway). --- Coalpit/Core.hs | 7 +------ Coalpit/DSV.hs | 33 ++++++++------------------------- 2 files changed, 9 insertions(+), 31 deletions(-) (limited to 'Coalpit') diff --git a/Coalpit/Core.hs b/Coalpit/Core.hs index 3e84b23..ac2b03c 100644 --- a/Coalpit/Core.hs +++ b/Coalpit/Core.hs @@ -366,12 +366,6 @@ instance {-#OVERLAPPING#-} Coalpit String where toArgs _ i = [i] argHelper _ _ _ = "STRING" --- | A dot ("."). -instance Coalpit () where - argParser _ = pS (char '.') *> pure () - toArgs _ () = ["."] - argHelper _ _ _ = "." - instance Coalpit Scientific where argParser _ = try $ do x <- token (Right . unArg) Nothing @@ -453,6 +447,7 @@ instance Coalpit DiffTime where argHelper _ _ _ = "DIFF_TIME" +instance Coalpit () instance Coalpit Bool instance Coalpit Ordering instance Coalpit ExitCode diff --git a/Coalpit/DSV.hs b/Coalpit/DSV.hs index 4940843..2ba9464 100644 --- a/Coalpit/DSV.hs +++ b/Coalpit/DSV.hs @@ -31,15 +31,6 @@ composeDSVLine fs = intercalate [fs] . map escapeVal then inner else init $ tail inner --- | Composes DSV out of values. -composeDSV :: Char - -- ^ Field separator. - -> [[String]] - -- ^ Lines of values. - -> String -composeDSV fs = unlines . map (composeDSVLine fs) - - pStr :: Char -> Parsec Void String String pStr fs = do s <- try (between (char '"') (char '"') @@ -54,23 +45,15 @@ pStr fs = do pDSVLine :: Char -> Parsec Void String [String] pDSVLine fs = pStr fs `sepBy` char fs --- | Parses values out of DSV. -parseDSV :: Char - -- ^ Field separator - -> String - -- ^ A string containing lines. - -> [Either String [String]] -parseDSV fs = map parseLine . lines - where parseLine :: String -> Either String [String] - parseLine l = case parse (pDSVLine fs) "line" l of - Left err -> Left $ parseErrorPretty err - Right x -> Right x - +parseDSVLine :: Char -> String -> Either String [String] +parseDSVLine fs l = case parse (pDSVLine fs) "line" l of + Left err -> Left $ parseErrorPretty err + Right x -> Right x -- | Shows values in DSV format. -showDSV :: Coalpit a => Options -> [a] -> String -showDSV opt = composeDSV (fieldSeparator opt) . map (toArgs opt) +showDSV :: Coalpit a => Options -> a -> String +showDSV opt = composeDSVLine (fieldSeparator opt) . (toArgs opt) -- | Reads values from DSV format. -readDSV :: Coalpit a => Options -> String -> [Either String a] -readDSV opt = map (>>= fromArgs opt) . parseDSV (fieldSeparator opt) +readDSV :: Coalpit a => Options -> String -> Either String a +readDSV opt = (>>= fromArgs opt) . parseDSVLine (fieldSeparator opt) -- cgit v1.2.3