cassava 0.5.3.2 → 0.5.4.0
raw patch · 3 files changed
+41/−9 lines, 3 filesdep ~QuickCheckPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: QuickCheck
API changes (from Hackage documentation)
+ Data.Csv: ($dmheaderOrder) :: (DefaultOrdered a, Generic a, GToNamedRecordHeader (Rep a)) => a -> Header
+ Data.Csv: ($dmparseNamedRecord) :: (FromNamedRecord a, Generic a, GFromNamedRecord (Rep a)) => NamedRecord -> Parser a
+ Data.Csv: ($dmparseRecord) :: (FromRecord a, Generic a, GFromRecord (Rep a)) => Record -> Parser a
+ Data.Csv: ($dmtoNamedRecord) :: (ToNamedRecord a, Generic a, GToRecord (Rep a) (ByteString, ByteString)) => a -> NamedRecord
+ Data.Csv: ($dmtoRecord) :: (ToRecord a, Generic a, GToRecord (Rep a) Field) => a -> Record
+ Data.Csv.Streaming: decodeByNameWithP :: (NamedRecord -> Parser a) -> DecodeOptions -> ByteString -> Either String (Header, Records a)
+ Data.Csv.Streaming: decodeWithP :: (Record -> Parser a) -> DecodeOptions -> HasHeader -> ByteString -> Records a
- Data.Csv: class GFromNamedRecord f
+ Data.Csv: class GFromNamedRecord (f :: k -> Type)
- Data.Csv: class GFromRecord f
+ Data.Csv: class GFromRecord (f :: k -> Type)
- Data.Csv: class GToNamedRecordHeader a
+ Data.Csv: class GToNamedRecordHeader (a :: k -> Type)
- Data.Csv: class GToRecord a f
+ Data.Csv: class GToRecord (a :: k -> Type) f
- Data.Csv: encodeDefaultOrderedByNameWith :: forall a. (DefaultOrdered a, ToNamedRecord a) => EncodeOptions -> [a] -> ByteString
+ Data.Csv: encodeDefaultOrderedByNameWith :: (DefaultOrdered a, ToNamedRecord a) => EncodeOptions -> [a] -> ByteString
- Data.Csv: headerOrder :: (DefaultOrdered a, Generic a, GToNamedRecordHeader (Rep a)) => a -> Header
+ Data.Csv: headerOrder :: DefaultOrdered a => a -> Header
- Data.Csv: newtype () => Only a
+ Data.Csv: newtype Only a
- Data.Csv: parseNamedRecord :: (FromNamedRecord a, Generic a, GFromNamedRecord (Rep a)) => NamedRecord -> Parser a
+ Data.Csv: parseNamedRecord :: FromNamedRecord a => NamedRecord -> Parser a
- Data.Csv: parseRecord :: (FromRecord a, Generic a, GFromRecord (Rep a)) => Record -> Parser a
+ Data.Csv: parseRecord :: FromRecord a => Record -> Parser a
- Data.Csv: toNamedRecord :: (ToNamedRecord a, Generic a, GToRecord (Rep a) (ByteString, ByteString)) => a -> NamedRecord
+ Data.Csv: toNamedRecord :: ToNamedRecord a => a -> NamedRecord
- Data.Csv: toRecord :: (ToRecord a, Generic a, GToRecord (Rep a) Field) => a -> Record
+ Data.Csv: toRecord :: ToRecord a => a -> Record
- Data.Csv.Builder: encodeDefaultOrderedNamedRecordWith :: forall a. (DefaultOrdered a, ToNamedRecord a) => EncodeOptions -> a -> Builder
+ Data.Csv.Builder: encodeDefaultOrderedNamedRecordWith :: (DefaultOrdered a, ToNamedRecord a) => EncodeOptions -> a -> Builder
- Data.Csv.Incremental: encodeDefaultOrderedByNameWith :: forall a. (DefaultOrdered a, ToNamedRecord a) => EncodeOptions -> NamedBuilder a -> ByteString
+ Data.Csv.Incremental: encodeDefaultOrderedByNameWith :: (DefaultOrdered a, ToNamedRecord a) => EncodeOptions -> NamedBuilder a -> ByteString
Files
- CHANGES.md +6/−0
- cassava.cabal +6/−5
- src/Data/Csv/Streaming.hs +29/−4
CHANGES.md view
@@ -1,3 +1,9 @@+## Version 0.5.4.0++ * Add `decodeWithP` and `decodeByNameWithP` to `Streaming` interface ([PR #237](https://github.com/haskell-hvr/cassava/pull/237)).+ * Build tested with GHC 8.0 - 9.12.2.+ * Functionality tested with GHC 8.4 - 9.12.2.+ ## Version 0.5.3.2 * Proper exception on hanging doublequote ([PR #222](https://github.com/haskell-hvr/cassava/pull/222)).
cassava.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.12 Name: cassava-Version: 0.5.3.2+Version: 0.5.4.0 Synopsis: A CSV parsing and encoding library Description: { @@ -43,9 +43,10 @@ CHANGES.md, README.md Tested-with:- GHC == 9.10.1- GHC == 9.8.2- GHC == 9.6.6+ GHC == 9.12.2+ GHC == 9.10.2+ GHC == 9.8.4+ GHC == 9.6.7 GHC == 9.4.8 GHC == 9.2.8 GHC == 9.0.2@@ -102,7 +103,7 @@ , array >= 0.4 && < 0.6 , attoparsec >= 0.11.3.0 && < 0.15 , bytestring >= 0.10.4 && < 0.13- , containers >= 0.4.2 && < 0.8+ , containers >= 0.4.2 && < 1 , deepseq >= 1.1 && < 1.6 , hashable < 2 , scientific >= 0.3.4.7 && < 0.4
src/Data/Csv/Streaming.hs view
@@ -21,11 +21,13 @@ , HasHeader(..) , decode , decodeWith+ , decodeWithP -- ** Name-based record conversion -- $namebased , decodeByName , decodeByNameWith+ , decodeByNameWithP ) where import Control.DeepSeq (NFData(rnf))@@ -36,8 +38,9 @@ import Prelude hiding (foldr) import Data.Csv.Conversion+import qualified Data.Csv.Conversion as Conversion import Data.Csv.Incremental hiding (decode, decodeByName, decodeByNameWith,- decodeWith)+ decodeByNameWithP, decodeWith, decodeWithP) import qualified Data.Csv.Incremental as I import Data.Csv.Parser import Data.Csv.Types@@ -134,8 +137,19 @@ -- skipped -> BL.ByteString -- ^ CSV data -> Records a-decodeWith !opts hasHeader s0 =- go (BL.toChunks s0) (I.decodeWith opts hasHeader)+decodeWith = decodeWithP parseRecord++-- | Like 'decodeWith', but lets you specify a parser function.+--+-- @since 0.5.4.0+decodeWithP :: (Record -> Conversion.Parser a)+ -> DecodeOptions -- ^ Decoding options+ -> HasHeader -- ^ Data contains header that should be+ -- skipped+ -> BL.ByteString -- ^ CSV data+ -> Records a+decodeWithP _parseRecord !opts hasHeader s0 =+ go (BL.toChunks s0) (I.decodeWithP _parseRecord opts hasHeader) where go ss (Done xs) = foldr Cons (Nil Nothing (BL.fromChunks ss)) xs go ss (Fail rest err) = Nil (Just err) (BL.fromChunks (rest:ss))@@ -159,7 +173,18 @@ => DecodeOptions -- ^ Decoding options -> BL.ByteString -- ^ CSV data -> Either String (Header, Records a)-decodeByNameWith !opts s0 = go (BL.toChunks s0) (I.decodeByNameWith opts)+decodeByNameWith = decodeByNameWithP parseNamedRecord++-- | Like 'decodeByNameWith', but lets you specify a parser function.+--+-- @since 0.5.4.0+decodeByNameWithP :: (NamedRecord -> Conversion.Parser a)+ -- ^ Custom parser function+ -> DecodeOptions -- ^ Decoding options+ -> BL.ByteString -- ^ CSV data+ -> Either String (Header, Records a)+decodeByNameWithP _parseNamedRecord !opts s0 =+ go (BL.toChunks s0) (I.decodeByNameWithP _parseNamedRecord opts) where go ss (DoneH hdr p) = Right (hdr, go2 ss p) go ss (FailH rest err) = Left $ err ++ " at " ++