cassava 0.4.2.1 → 0.4.2.2
raw patch · 8 files changed
+82/−31 lines, 8 filesdep ~attoparsecdep ~basedep ~blaze-builderPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: attoparsec, base, blaze-builder, bytestring, criterion, deepseq, text, unordered-containers, vector
API changes (from Hackage documentation)
Files
- Data/Csv/Conversion.hs +9/−5
- Data/Csv/Conversion/Internal.hs +3/−1
- Data/Csv/Encoding.hs +7/−3
- Data/Csv/Incremental.hs +6/−2
- Data/Csv/Parser.hs +8/−4
- Data/Csv/Streaming.hs +6/−2
- Data/Csv/Util.hs +6/−2
- cassava.cabal +37/−12
Data/Csv/Conversion.hs view
@@ -31,8 +31,7 @@ , namedRecord ) where -import Control.Applicative (Alternative, Applicative, (<*>), (<$>), (<|>),- (<*), (*>), empty, pure)+import Control.Applicative (Alternative, (<$>), (<|>), empty) import Control.Monad (MonadPlus, mplus, mzero) import Data.Attoparsec.ByteString.Char8 (double) import qualified Data.Attoparsec.ByteString.Char8 as A8@@ -42,21 +41,26 @@ import qualified Data.HashMap.Lazy as HM import Data.Int (Int8, Int16, Int32, Int64) import qualified Data.Map as M-import Data.Monoid (Monoid, mappend, mempty) import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Encoding as LT-import Data.Traversable (traverse) import Data.Vector (Vector, (!)) import qualified Data.Vector as V import qualified Data.Vector.Unboxed as U-import Data.Word (Word, Word8, Word16, Word32, Word64)+import Data.Word (Word8, Word16, Word32, Word64) import GHC.Float (double2Float) import Prelude hiding (lookup, takeWhile) import Data.Csv.Conversion.Internal import Data.Csv.Types++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative (Applicative, (<*>), (<*), (*>), pure)+import Data.Monoid (Monoid, mappend, mempty)+import Data.Traversable (traverse)+import Data.Word (Word)+#endif #ifdef GENERICS import GHC.Generics
Data/Csv/Conversion/Internal.hs view
@@ -24,9 +24,10 @@ -- TODO: Add an optimized version for Integer. formatDecimal :: Integral a => a -> Builder-{-# SPECIALIZE formatDecimal :: Int8 -> Builder #-} {-# RULES "formatDecimal/Int" formatDecimal = formatBoundedSigned :: Int -> Builder #-}+{-# RULES "formatDecimal/Int8" formatDecimal = formatBoundedSigned+ :: Int8 -> Builder #-} {-# RULES "formatDecimal/Int16" formatDecimal = formatBoundedSigned :: Int16 -> Builder #-} {-# RULES "formatDecimal/Int32" formatDecimal = formatBoundedSigned@@ -43,6 +44,7 @@ :: Word32 -> Builder #-} {-# RULES "formatDecimal/Word64" formatDecimal = formatPositive :: Word64 -> Builder #-}+{-# NOINLINE formatDecimal #-} formatDecimal i | i < 0 = minus <> if i <= -128
Data/Csv/Encoding.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE BangPatterns, OverloadedStrings #-}+{-# LANGUAGE BangPatterns, CPP, OverloadedStrings #-} -- Module: Data.Csv.Encoding -- Copyright: (c) 2011 MailRank, Inc.@@ -32,7 +32,7 @@ import Blaze.ByteString.Builder (Builder, fromByteString, fromWord8, toLazyByteString, toByteString) import Blaze.ByteString.Builder.Char8 (fromString)-import Control.Applicative ((*>), (<|>), optional, pure)+import Control.Applicative ((<|>), optional) import Data.Attoparsec.ByteString.Char8 (endOfInput) import qualified Data.Attoparsec.ByteString.Lazy as AL import qualified Data.ByteString as B@@ -40,7 +40,6 @@ import qualified Data.ByteString.Lazy as L import qualified Data.ByteString.Lazy.Char8 as BL8 import qualified Data.HashMap.Strict as HM-import Data.Monoid (mconcat, mempty) import Data.Vector (Vector) import qualified Data.Vector as V import Data.Word (Word8)@@ -55,6 +54,11 @@ import Data.Csv.Types hiding (toNamedRecord) import qualified Data.Csv.Types as Types import Data.Csv.Util (blankLine, endOfLine)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((*>), pure)+import Data.Monoid (mconcat, mempty)+#endif -- TODO: 'encode' isn't as efficient as it could be.
Data/Csv/Incremental.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE BangPatterns, DeriveFunctor #-}+{-# LANGUAGE BangPatterns, CPP, DeriveFunctor #-} -- | This module allows for incremental decoding of CSV data. This is -- useful if you e.g. want to interleave I\/O with parsing or if you@@ -27,7 +27,7 @@ , decodeByNameWith ) where -import Control.Applicative ((<*), (<|>))+import Control.Applicative ((<|>)) import qualified Data.Attoparsec.ByteString as A import Data.Attoparsec.ByteString.Char8 (endOfInput) import qualified Data.ByteString as B@@ -38,6 +38,10 @@ import Data.Csv.Parser import Data.Csv.Types import Data.Csv.Util (endOfLine)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((<*))+#endif -- $feed-header --
Data/Csv/Parser.hs view
@@ -26,20 +26,24 @@ import Blaze.ByteString.Builder (fromByteString, toByteString) import Blaze.ByteString.Builder.Char.Utf8 (fromChar)-import Control.Applicative ((*>), (<$>), (<*), optional, pure)+import Control.Applicative ((<$>), optional) import Data.Attoparsec.ByteString.Char8 (char, endOfInput) import qualified Data.Attoparsec.ByteString as A import qualified Data.Attoparsec.Lazy as AL import qualified Data.Attoparsec.Zepto as Z import qualified Data.ByteString as S import qualified Data.ByteString.Unsafe as S-import Data.Monoid (mappend, mempty) import qualified Data.Vector as V import Data.Word (Word8) import Data.Csv.Types import Data.Csv.Util ((<$!>), blankLine, endOfLine, liftM2', cr, newline, doubleQuote) +#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((*>), (<*), pure)+import Data.Monoid (mappend, mempty)+#endif+ -- | Options that controls how data is decoded. These options can be -- used to e.g. decode tab-separated data instead of comma-separated -- data.@@ -84,7 +88,7 @@ case mb of Just b | b == delim -> liftM2' (:) (A.anyWord8 *> p) loop _ -> pure []-{-# INLINe sepByDelim1' #-}+{-# INLINE sepByDelim1' #-} -- | Specialized version of 'sepBy1'' which is faster due to not -- accepting an arbitrary separator.@@ -100,7 +104,7 @@ | b == newline -> liftM2' (:) (A.anyWord8 *> p) loop _ -> pure []-{-# INLINe sepByEndOfLine1' #-}+{-# INLINE sepByEndOfLine1' #-} -- | Parse a CSV file that includes a header. csvWithHeader :: DecodeOptions -> AL.Parser (Header, V.Vector NamedRecord)
Data/Csv/Streaming.hs view
@@ -28,13 +28,12 @@ , decodeByNameWith ) where -import Control.Applicative ((<$>), (<*>), pure)+import Control.Applicative ((<$>)) import Control.DeepSeq (NFData(rnf)) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy.Char8 as BL8 import Data.Foldable (Foldable(..))-import Data.Traversable (Traversable(..)) import Prelude hiding (foldr) import Data.Csv.Conversion@@ -43,6 +42,11 @@ import qualified Data.Csv.Incremental as I import Data.Csv.Parser import Data.Csv.Types++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((<*>), pure)+import Data.Traversable (Traversable(..))+#endif #if !MIN_VERSION_bytestring(0,10,0) import qualified Data.ByteString.Lazy.Internal as BL -- for constructors
Data/Csv/Util.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE BangPatterns, OverloadedStrings #-}+{-# LANGUAGE BangPatterns, CPP, OverloadedStrings #-} module Data.Csv.Util ( (<$!>)@@ -10,13 +10,17 @@ , cr ) where -import Control.Applicative ((<|>), (*>))+import Control.Applicative ((<|>)) import Data.Word (Word8) import Data.Attoparsec.ByteString.Char8 (string) import qualified Data.Attoparsec.ByteString as A import qualified Data.ByteString as B import qualified Data.Vector as V import Data.Attoparsec.ByteString (Parser)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((*>))+#endif -- | A strict version of 'Data.Functor.<$>' for monads. (<$!>) :: Monad m => (a -> b) -> m a -> m b
cassava.cabal view
@@ -1,5 +1,5 @@ Name: cassava-Version: 0.4.2.1+Version: 0.4.2.2 Synopsis: A CSV parsing and encoding library Description: A CSV parsing and encoding library optimized for ease of use and high@@ -18,7 +18,6 @@ Cabal-version: >=1.8 Extra-source-files: examples/*.hs - Library Exposed-modules: Data.Csv@@ -38,7 +37,7 @@ array < 0.6, attoparsec >= 0.10.2 && < 0.13, base < 5,- blaze-builder < 0.4,+ blaze-builder < 0.5, bytestring < 0.11, containers < 0.6, deepseq < 1.5,@@ -51,7 +50,7 @@ if impl(ghc >= 7.2.1) cpp-options: -DGENERICS build-depends: ghc-prim >= 0.2 && < 0.4- + Test-suite unit-tests Type: exitcode-stdio-1.0 Main-is: UnitTests.hs@@ -75,17 +74,43 @@ Benchmark benchmarks Type: exitcode-stdio-1.0 Main-is: Benchmarks.hs++ Other-modules:+ Data.Csv+ Data.Csv.Compat.Monoid+ Data.Csv.Conversion+ Data.Csv.Conversion.Internal+ Data.Csv.Encoding+ Data.Csv.Incremental+ Data.Csv.Parser+ Data.Csv.Streaming+ Data.Csv.Types+ Data.Csv.Util+ Build-depends:- base,- bytestring,- cassava,- criterion,- deepseq,+ array < 0.6,+ attoparsec >= 0.10.2 && < 0.13,+ base < 5,+ blaze-builder < 0.5,+ bytestring < 0.11,+ containers < 0.6,+ criterion >= 1.0,+ deepseq < 1.5, lazy-csv >= 0.5,+ text < 1.3, text,- unordered-containers,- vector- hs-source-dirs: benchmarks+ unordered-containers < 0.3,+ vector < 0.11++ ghc-options: -Wall -O2++ if impl(ghc >= 7.2.1)+ cpp-options: -DGENERICS+ build-depends: ghc-prim >= 0.2 && < 0.4++ -- We cannot depend on the library directly as that creates a+ -- dependency cycle.+ hs-source-dirs: . benchmarks source-repository head type: git