packages feed

cassava-conduit 0.1.0 → 0.2.0

raw patch · 3 files changed

+50/−22 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Csv.Conduit: fromCsvLiftError :: (FromRecord a, MonadError e m) => (CsvParseError -> e) -> DecodeOptions -> HasHeader -> Conduit ByteString m a
+ Data.Csv.Conduit: fromNamedCsvLiftError :: (FromNamedRecord a, MonadError e m) => (CsvParseError -> e) -> DecodeOptions -> Conduit ByteString m a
- Data.Csv.Conduit: fromCsv :: (Show a, Monad m, FromRecord a, MonadError CsvParseError m) => DecodeOptions -> HasHeader -> Conduit ByteString m a
+ Data.Csv.Conduit: fromCsv :: (FromRecord a, MonadError CsvParseError m) => DecodeOptions -> HasHeader -> Conduit ByteString m a
- Data.Csv.Conduit: fromNamedCsv :: (Show a, Monad m, FromNamedRecord a, MonadError CsvParseError m) => DecodeOptions -> Conduit ByteString m a
+ Data.Csv.Conduit: fromNamedCsv :: (FromNamedRecord a, MonadError CsvParseError m) => DecodeOptions -> Conduit ByteString m a

Files

CHANGELOG.md view
@@ -1,3 +1,12 @@+# 0.2.x++## 0.1.0 -> 0.2.0++``` Haskell+fromCsvLiftError :: (FromRecord a, MonadError e m) => (CsvParseError -> e) -> DecodeOptions -> HasHeader -> Conduit BS.ByteString m a+fromNamedCsvLiftError :: (FromNamedRecord a, MonadError e m) => (CsvParseError -> e) -> DecodeOptions -> Conduit BS.ByteString m a+```+ # 0.1.x  ## 0.0.1 -> 0.1.0
cassava-conduit.cabal view
@@ -1,10 +1,10 @@ name:               cassava-conduit-version:            0.1.0+version:            0.2.0 license:            BSD3 license-file:       etc/LICENCE.md author:             Dom De Re maintainer:         Dom De Re-copyright:          Copyright (C) 2014+copyright:          Copyright (C) 2014-2015 Dom De Re synopsis:           Conduit interface for cassava package category:           Data description:        Conduit interface for cassava package
src/Data/Csv/Conduit.hs view
@@ -14,7 +14,9 @@         CsvParseError(..)     -- * Conduits     ,   fromCsv+    ,   fromCsvLiftError     ,   fromNamedCsv+    ,   fromNamedCsvLiftError     ,   fromCsvStreamError     ,   fromNamedCsvStreamError     ,   toCsv@@ -40,19 +42,34 @@ -- Streams parsed records, Errors are not received in the stream but instead after the pipeline is executed, -- If you want to handle errors as they come and resume, see `fromCsvStreamError` ---fromCsv :: (Show a, Monad m, FromRecord a, MonadError CsvParseError m) => DecodeOptions -> HasHeader -> Conduit BS.ByteString m a-fromCsv opts h = {-# SCC fromCsv_p #-} terminatingStreamParser $ decodeWith opts h+fromCsv :: (FromRecord a, MonadError CsvParseError m) => DecodeOptions -> HasHeader -> Conduit BS.ByteString m a+fromCsv = fromCsvLiftError id  -- |+-- Sometimes your pipeline will involve an error type other than `CsvParseError`, in which case if you provide+-- a function to project it into your custom error type, you can use this instead of `fromCsv`+--+fromCsvLiftError :: (FromRecord a, MonadError e m) => (CsvParseError -> e) -> DecodeOptions -> HasHeader -> Conduit BS.ByteString m a+fromCsvLiftError f opts h = {-# SCC fromCsvLiftError_p #-} terminatingStreamParser f $ decodeWith opts h+++-- | -- Parses an instance of `FromNamedRecord`, this conduit drops the Header -- -- Errors are not seen in the pipeline but rather at the end after executing the pipeline, if you want to handle the errors -- as they occur, try `fromNamedCsvStreamError` instead. ---fromNamedCsv :: (Show a, Monad m, FromNamedRecord a, MonadError CsvParseError m) => DecodeOptions -> Conduit BS.ByteString m a-fromNamedCsv opts = {-# SCC fromNamedCsv_p #-} terminatingStreamHeaderParser $ decodeByNameWith opts+fromNamedCsv :: (FromNamedRecord a, MonadError CsvParseError m) => DecodeOptions -> Conduit BS.ByteString m a+fromNamedCsv = fromNamedCsvLiftError id  -- |+-- Sometimes your pipeline will involve an error type other than `CsvParseError`, in which case if you provide+-- a function to project it into your custom error type, you can use this instead of `fromCsv`+--+fromNamedCsvLiftError :: (FromNamedRecord a, MonadError e m) => (CsvParseError -> e) -> DecodeOptions -> Conduit BS.ByteString m a+fromNamedCsvLiftError f opts = {-# SCC fromNamedCsv_p #-} terminatingStreamHeaderParser f $ decodeByNameWith opts++-- | -- Same as `fromCsv` but allows for errors to be handled in the pipeline instead -- fromCsvStreamError :: (Monad m, FromRecord a) => DecodeOptions -> HasHeader -> Conduit BS.ByteString m (Either CsvParseError a)@@ -88,35 +105,37 @@ streamParser (Done rs) = mapM_ (yield . first IncrementalError) rs  terminatingStreamHeaderParser-    :: (Show a, Monad m, MonadError CsvParseError m)-    => HeaderParser (Parser a)+    :: (Monad m, MonadError e m)+    => (CsvParseError -> e)+    -> HeaderParser (Parser a)     -> Conduit BS.ByteString m a-terminatingStreamHeaderParser (FailH rest errMsg)   = {-# SCC terminatingStreamHeaderParser_FailH_p #-} mapM $ const $ throwError $ CsvParseError rest errMsg-terminatingStreamHeaderParser (PartialH p)          = {-# SCC terminatingStreamHeaderParser_PartialH_p #-} await >>= maybe (return ()) (terminatingStreamHeaderParser . p)-terminatingStreamHeaderParser (DoneH _ p)           = {-# SCC terminatingStreamHeaderParser_DoneH_p #-} terminatingStreamParser p+terminatingStreamHeaderParser f (FailH rest errMsg)   = {-# SCC terminatingStreamHeaderParser_FailH_p #-} mapM $ const $ throwError $ f $ CsvParseError rest errMsg+terminatingStreamHeaderParser f (PartialH p)          = {-# SCC terminatingStreamHeaderParser_PartialH_p #-} await >>= maybe (return ()) (terminatingStreamHeaderParser f . p)+terminatingStreamHeaderParser f (DoneH _ p)           = {-# SCC terminatingStreamHeaderParser_DoneH_p #-} terminatingStreamParser f p  terminatingStreamParser-    :: (Show a, Monad m, MonadError CsvParseError m)-    => Parser a+    :: (Monad m, MonadError e m)+    => (CsvParseError -> e)+    -> Parser a     -> Conduit BS.ByteString m a-terminatingStreamParser (Fail rest errMsg) = {-# SCC terminatingStreamParser_Fail_p #-} mapM $ const $ throwError $ CsvParseError rest errMsg-terminatingStreamParser (Many ers p) = {-# SCC terminatingStreamParser_Many_p #-}+terminatingStreamParser f (Fail rest errMsg)    = {-# SCC terminatingStreamParser_Fail_p #-} mapM $ const $ throwError $ f $ CsvParseError rest errMsg+terminatingStreamParser f (Many ers p)          = {-# SCC terminatingStreamParser_Many_p #-}     let-        errorHandler :: (Monad m, MonadError CsvParseError m) => String -> Conduit BS.ByteString m a-        errorHandler = mapM . const . throwError . IncrementalError+        errorHandler :: (Monad m, MonadError e m) => (CsvParseError -> e) -> String -> Conduit BS.ByteString m a+        errorHandler f' = mapM . const . throwError . f' . IncrementalError          safeResultHandler-            :: (Show a, Monad m, MonadError CsvParseError m)+            :: (Monad m)             => (BS.ByteString -> Parser a)             -> (Parser a -> Conduit BS.ByteString m a)             -> [a]             -> Conduit BS.ByteString m a-        safeResultHandler p' f rs = do+        safeResultHandler p' f' rs = do             mapM_ yield rs             -- wait for more..-            await >>= maybe (return ()) (f . p')+            await >>= maybe (return ()) (f' . p')     in         -- send the results down the stream..-        either errorHandler (safeResultHandler p terminatingStreamParser) (sequence ers)-terminatingStreamParser (Done rs) = {-# SCC terminatingStreamParser_Done_p #-} either (mapM . const . throwError . IncrementalError) (mapM_ yield) (sequence rs)+        either (errorHandler f) (safeResultHandler p (terminatingStreamParser f)) (sequence ers)+terminatingStreamParser f (Done rs) = {-# SCC terminatingStreamParser_Done_p #-} either (mapM . const . throwError . f . IncrementalError) (mapM_ yield) (sequence rs)