packages feed

cassava-conduit 0.3.4 → 0.3.5

raw patch · 4 files changed

+100/−90 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

cassava-conduit.cabal view
@@ -1,5 +1,5 @@ name:               cassava-conduit-version:            0.3.4+version:            0.3.5 license:            BSD3 license-file:       etc/LICENCE.md author:             Dom De Re@@ -56,8 +56,13 @@     main-is:            Main.hs     hs-source-dirs:     quickcheck     build-depends:      base                >= 4 && < 5-                    ,   QuickCheck          == 2.9.*-                    ,   cassava-conduit+                      , bytestring          == 0.10.*+                      , cassava             == 0.4.*+                      , conduit             == 1.2.*+                      , conduit-extra       == 1.1.*+                      , QuickCheck          == 2.9.*+                      , text                == 1.2.*+                      , cassava-conduit  benchmark               benchmarks     default-language:   Haskell2010
quickcheck/Main.hs view
@@ -1,5 +1,7 @@ module Main where +import qualified Test.Data.Csv.Conduit+ import Control.Monad  import System.Exit@@ -7,5 +9,5 @@  main :: IO () main = hSetBuffering stdout LineBuffering >> mapM id-    [-    ] >>= \rs -> when (not . all id $ rs) exitFailure+  [ Test.Data.Csv.Conduit.tests+  ] >>= \rs -> when (not . all id $ rs) exitFailure
src/Data/Csv/Conduit.hs view
@@ -10,44 +10,45 @@ -- ------------------------------------------------------------------- module Data.Csv.Conduit (-    -- * Types-        CsvParseError(..)-    ,   CsvStreamHaltParseError(..)-    ,   CsvStreamRecordParseError(..)-    -- * Conduits-    ,   fromCsv-    ,   fromCsvLiftError-    ,   fromNamedCsv-    ,   fromNamedCsvLiftError-    ,   fromCsvStreamError-    ,   fromNamedCsvStreamError-    ,   toCsv-    ) where+  -- * Types+    CsvParseError(..)+  , CsvStreamHaltParseError(..)+  , CsvStreamRecordParseError(..)+  -- * Conduits+  , fromCsv+  , fromCsvLiftError+  , fromNamedCsv+  , fromNamedCsvLiftError+  , fromCsvStreamError+  , fromNamedCsvStreamError+  , toCsv+  ) where  import LocalPrelude -import Control.Monad.Trans ( MonadTrans(..) )-import Control.Monad.Error.Class ( MonadError(..) )-import Data.Bifunctor ( first )+import Control.Monad.Trans (MonadTrans(..))+import Control.Monad.Error.Class (MonadError(..))+import Data.Bifunctor (first) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL-import Data.Conduit ( Conduit, await, yield )-import Data.Conduit.List ( map, mapM )-import Data.Csv ( FromNamedRecord, FromRecord, ToRecord, DecodeOptions, EncodeOptions, HasHeader, encodeWith )-import Data.Csv.Incremental ( HeaderParser(..), Parser(..), decodeByNameWith, decodeWith )-import Data.Foldable ( mapM_ )+import Data.Conduit (Conduit, await, yield)+import Data.Conduit.List (map, mapM)+import Data.Csv (FromNamedRecord, FromRecord, ToRecord, DecodeOptions, EncodeOptions, HasHeader, encodeWith)+import Data.Csv.Incremental (HeaderParser(..), Parser(..), decodeByNameWith, decodeWith)+import Data.Foldable (mapM_) import qualified Data.Text as T  data CsvParseError =-        CsvParseError BS.ByteString T.Text-    |   IncrementalError T.Text-        deriving (Show, Eq)+    CsvParseError BS.ByteString T.Text+  | IncrementalError T.Text+    deriving (Show, Eq)  -- | When you want to include errors in the stream, this error type represents errors that halt the stream. -- They do not appear inside the conduit and will instead get returned from running the conduit. ---data CsvStreamHaltParseError = HaltingCsvParseError BS.ByteString T.Text -- ^ the remaining bytestring that was read in but not parsed yet, and the stringy error msg describing the fail.-    deriving (Show, Eq)+data CsvStreamHaltParseError =+  HaltingCsvParseError BS.ByteString T.Text -- ^ the remaining bytestring that was read in but not parsed yet, and the stringy error msg describing the fail.+  deriving (Show, Eq)  -- | When you want to include errors in the stream, these are the errors that can be included in the stream, -- they are usually problems restricted to individual records, and streaming can resume from the next record@@ -116,45 +117,45 @@ streamParser :: (MonadError e m) => (CsvStreamHaltParseError -> e) -> Parser a -> Conduit BS.ByteString m (Either CsvStreamRecordParseError a) streamParser f (Fail rest errMsg)   = {-# SCC streamParser_Fail_p #-} lift . throwError . f $ HaltingCsvParseError rest (T.pack errMsg) streamParser f (Many rs p)          = {-# SCC streamParser_Many_p #-} do-    -- send the results down the stream..-    mapM_ (yield . first (CsvStreamRecordParseError . T.pack)) rs-    -- wait for more..-    more <- await-    maybe (return ()) (streamParser f . p) more+  -- send the results down the stream..+  mapM_ (yield . first (CsvStreamRecordParseError . T.pack)) rs+  -- wait for more..+  more <- await+  maybe (return ()) (streamParser f . p) more streamParser _ (Done rs)            = {-# SCC streamParser_Done_p #-} mapM_ (yield . first (CsvStreamRecordParseError . T.pack)) rs  terminatingStreamHeaderParser-    :: (Monad m, MonadError e m)-    => (CsvParseError -> e)-    -> HeaderParser (Parser a)-    -> Conduit BS.ByteString m a+  :: (Monad m, MonadError e m)+  => (CsvParseError -> e)+  -> HeaderParser (Parser a)+  -> Conduit BS.ByteString m a terminatingStreamHeaderParser f (FailH rest errMsg)   = {-# SCC terminatingStreamHeaderParser_FailH_p #-} lift . throwError . f . CsvParseError rest . T.pack $ 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-    :: (Monad m, MonadError e m)-    => (CsvParseError -> e)-    -> Parser a-    -> Conduit BS.ByteString m a+  :: (Monad m, MonadError e m)+  => (CsvParseError -> e)+  -> Parser a+  -> Conduit BS.ByteString m a terminatingStreamParser f (Fail rest errMsg)    = {-# SCC terminatingStreamParser_Fail_p #-} lift . throwError . f . CsvParseError rest . T.pack $ errMsg terminatingStreamParser f (Many ers p)          = {-# SCC terminatingStreamParser_Many_p #-}-    let-        errorHandler :: (Monad m, MonadError e m) => (CsvParseError -> e) -> String -> Conduit BS.ByteString m a-        errorHandler f' = mapM . const . throwError . f' . IncrementalError . T.pack+  let+    errorHandler :: (Monad m, MonadError e m) => (CsvParseError -> e) -> String -> Conduit BS.ByteString m a+    errorHandler f' = mapM . const . throwError . f' . IncrementalError . T.pack -        safeResultHandler-            :: (Monad m)-            => (BS.ByteString -> Parser a)-            -> (Parser a -> Conduit BS.ByteString m a)-            -> [a]-            -> Conduit BS.ByteString m a-        safeResultHandler p' f' rs = do-            mapM_ yield rs-            -- wait for more..-            await >>= maybe (return ()) (f' . p')-    in-        -- send the results down the stream..-        either (errorHandler f) (safeResultHandler p (terminatingStreamParser f)) (sequence ers)+    safeResultHandler+      :: (Monad m)+      => (BS.ByteString -> Parser a)+      -> (Parser a -> Conduit BS.ByteString m a)+      -> [a]+      -> Conduit BS.ByteString m a+    safeResultHandler p' f' rs = do+      mapM_ yield rs+      -- wait for more..+      await >>= f' . p' . fromMaybe BS.empty+  in+    -- send the results down the stream..+    either (errorHandler f) (safeResultHandler p (terminatingStreamParser f)) (sequence ers) terminatingStreamParser f (Done rs) = {-# SCC terminatingStreamParser_Done_p #-} either (lift . throwError . f . IncrementalError . T.pack) (mapM_ yield) (sequence rs) 
src/LocalPrelude.hs view
@@ -9,37 +9,39 @@ -- ------------------------------------------------------------------- module LocalPrelude (-    -- * Type Classes-        Functor(..)-    ,   A.Applicative(..)-    ,   Monad(..)-    ,   Num(..)-    ,   Show(..)-    ,   Eq(..)-    -- * Types-    ,   Char-    ,   Either(..)-    ,   Int-    ,   IO-    ,   Maybe(..)-    ,   String-    ,   Word8-    -- * Operators-    ,   (.)-    ,   ($)-    ,   ($!)-    ,   (<$>)-    ,   (++)-    -- * Functions-    ,   id-    ,   const-    ,   either-    ,   flip-    ,   fromIntegral-    ,   maybe-    ,   sequence-    ) where+  -- * Type Classes+    Functor(..)+  , A.Applicative(..)+  , Monad(..)+  , Num(..)+  , Show(..)+  , Eq(..)+  -- * Types+  , Char+  , Either(..)+  , Int+  , IO+  , Maybe(..)+  , String+  , Word8+  -- * Operators+  , (.)+  , ($)+  , ($!)+  , (<$>)+  , (++)+  -- * Functions+  , id+  , const+  , either+  , flip+  , fromIntegral+  , fromMaybe+  , maybe+  , sequence+  ) where  import Prelude import Control.Applicative as A+import Data.Maybe (fromMaybe) import Data.Word