cassava 0.4.3.1 → 0.4.4.0
raw patch · 2 files changed
+192/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Data/Csv/Conversion.hs +189/−0
- cassava.cabal +3/−2
Data/Csv/Conversion.hs view
@@ -49,6 +49,9 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy as L+#if MIN_VERSION_bytestring(0,10,4)+import qualified Data.ByteString.Short as SBS+#endif import Data.Hashable (Hashable) import qualified Data.HashMap.Lazy as HM import Data.Int (Int8, Int16, Int32, Int64)@@ -310,6 +313,182 @@ toField a, toField b, toField c, toField d, toField e, toField f, toField g, toField h, toField i] +instance (FromField a, FromField b, FromField c, FromField d, FromField e,+ FromField f, FromField g, FromField h, FromField i, FromField j) =>+ FromRecord (a, b, c, d, e, f, g, h, i, j) where+ parseRecord v+ | n == 10 = (,,,,,,,,,) <$> unsafeIndex v 0+ <*> unsafeIndex v 1+ <*> unsafeIndex v 2+ <*> unsafeIndex v 3+ <*> unsafeIndex v 4+ <*> unsafeIndex v 5+ <*> unsafeIndex v 6+ <*> unsafeIndex v 7+ <*> unsafeIndex v 8+ <*> unsafeIndex v 9+ | otherwise = lengthMismatch 10 v+ where+ n = V.length v++instance (ToField a, ToField b, ToField c, ToField d, ToField e, ToField f,+ ToField g, ToField h, ToField i, ToField j) =>+ ToRecord (a, b, c, d, e, f, g, h, i, j) where+ toRecord (a, b, c, d, e, f, g, h, i, j) = V.fromList [+ toField a, toField b, toField c, toField d, toField e, toField f,+ toField g, toField h, toField i, toField j]++instance (FromField a, FromField b, FromField c, FromField d, FromField e,+ FromField f, FromField g, FromField h, FromField i, FromField j,+ FromField k) =>+ FromRecord (a, b, c, d, e, f, g, h, i, j, k) where+ parseRecord v+ | n == 11 = (,,,,,,,,,,) <$> unsafeIndex v 0+ <*> unsafeIndex v 1+ <*> unsafeIndex v 2+ <*> unsafeIndex v 3+ <*> unsafeIndex v 4+ <*> unsafeIndex v 5+ <*> unsafeIndex v 6+ <*> unsafeIndex v 7+ <*> unsafeIndex v 8+ <*> unsafeIndex v 9+ <*> unsafeIndex v 10+ | otherwise = lengthMismatch 11 v+ where+ n = V.length v++instance (ToField a, ToField b, ToField c, ToField d, ToField e, ToField f,+ ToField g, ToField h, ToField i, ToField j, ToField k) =>+ ToRecord (a, b, c, d, e, f, g, h, i, j, k) where+ toRecord (a, b, c, d, e, f, g, h, i, j, k) = V.fromList [+ toField a, toField b, toField c, toField d, toField e, toField f,+ toField g, toField h, toField i, toField j, toField k]++instance (FromField a, FromField b, FromField c, FromField d, FromField e,+ FromField f, FromField g, FromField h, FromField i, FromField j,+ FromField k, FromField l) =>+ FromRecord (a, b, c, d, e, f, g, h, i, j, k, l) where+ parseRecord v+ | n == 12 = (,,,,,,,,,,,) <$> unsafeIndex v 0+ <*> unsafeIndex v 1+ <*> unsafeIndex v 2+ <*> unsafeIndex v 3+ <*> unsafeIndex v 4+ <*> unsafeIndex v 5+ <*> unsafeIndex v 6+ <*> unsafeIndex v 7+ <*> unsafeIndex v 8+ <*> unsafeIndex v 9+ <*> unsafeIndex v 10+ <*> unsafeIndex v 11+ | otherwise = lengthMismatch 12 v+ where+ n = V.length v++instance (ToField a, ToField b, ToField c, ToField d, ToField e, ToField f,+ ToField g, ToField h, ToField i, ToField j, ToField k, ToField l) =>+ ToRecord (a, b, c, d, e, f, g, h, i, j, k, l) where+ toRecord (a, b, c, d, e, f, g, h, i, j, k, l) = V.fromList [+ toField a, toField b, toField c, toField d, toField e, toField f,+ toField g, toField h, toField i, toField j, toField k, toField l]++instance (FromField a, FromField b, FromField c, FromField d, FromField e,+ FromField f, FromField g, FromField h, FromField i, FromField j,+ FromField k, FromField l, FromField m) =>+ FromRecord (a, b, c, d, e, f, g, h, i, j, k, l, m) where+ parseRecord v+ | n == 13 = (,,,,,,,,,,,,) <$> unsafeIndex v 0+ <*> unsafeIndex v 1+ <*> unsafeIndex v 2+ <*> unsafeIndex v 3+ <*> unsafeIndex v 4+ <*> unsafeIndex v 5+ <*> unsafeIndex v 6+ <*> unsafeIndex v 7+ <*> unsafeIndex v 8+ <*> unsafeIndex v 9+ <*> unsafeIndex v 10+ <*> unsafeIndex v 11+ <*> unsafeIndex v 12+ | otherwise = lengthMismatch 13 v+ where+ n = V.length v++instance (ToField a, ToField b, ToField c, ToField d, ToField e, ToField f,+ ToField g, ToField h, ToField i, ToField j, ToField k, ToField l,+ ToField m) =>+ ToRecord (a, b, c, d, e, f, g, h, i, j, k, l, m) where+ toRecord (a, b, c, d, e, f, g, h, i, j, k, l, m) = V.fromList [+ toField a, toField b, toField c, toField d, toField e, toField f,+ toField g, toField h, toField i, toField j, toField k, toField l,+ toField m]++instance (FromField a, FromField b, FromField c, FromField d, FromField e,+ FromField f, FromField g, FromField h, FromField i, FromField j,+ FromField k, FromField l, FromField m, FromField n) =>+ FromRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) where+ parseRecord v+ | n == 14 = (,,,,,,,,,,,,,) <$> unsafeIndex v 0+ <*> unsafeIndex v 1+ <*> unsafeIndex v 2+ <*> unsafeIndex v 3+ <*> unsafeIndex v 4+ <*> unsafeIndex v 5+ <*> unsafeIndex v 6+ <*> unsafeIndex v 7+ <*> unsafeIndex v 8+ <*> unsafeIndex v 9+ <*> unsafeIndex v 10+ <*> unsafeIndex v 11+ <*> unsafeIndex v 12+ <*> unsafeIndex v 13+ | otherwise = lengthMismatch 14 v+ where+ n = V.length v++instance (ToField a, ToField b, ToField c, ToField d, ToField e, ToField f,+ ToField g, ToField h, ToField i, ToField j, ToField k, ToField l,+ ToField m, ToField n) =>+ ToRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) where+ toRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = V.fromList [+ toField a, toField b, toField c, toField d, toField e, toField f,+ toField g, toField h, toField i, toField j, toField k, toField l,+ toField m, toField n]++instance (FromField a, FromField b, FromField c, FromField d, FromField e,+ FromField f, FromField g, FromField h, FromField i, FromField j,+ FromField k, FromField l, FromField m, FromField n, FromField o) =>+ FromRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) where+ parseRecord v+ | n == 15 = (,,,,,,,,,,,,,,) <$> unsafeIndex v 0+ <*> unsafeIndex v 1+ <*> unsafeIndex v 2+ <*> unsafeIndex v 3+ <*> unsafeIndex v 4+ <*> unsafeIndex v 5+ <*> unsafeIndex v 6+ <*> unsafeIndex v 7+ <*> unsafeIndex v 8+ <*> unsafeIndex v 9+ <*> unsafeIndex v 10+ <*> unsafeIndex v 11+ <*> unsafeIndex v 12+ <*> unsafeIndex v 13+ <*> unsafeIndex v 14+ | otherwise = lengthMismatch 15 v+ where+ n = V.length v++instance (ToField a, ToField b, ToField c, ToField d, ToField e, ToField f,+ ToField g, ToField h, ToField i, ToField j, ToField k, ToField l,+ ToField m, ToField n, ToField o) =>+ ToRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) where+ toRecord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = V.fromList [+ toField a, toField b, toField c, toField d, toField e, toField f,+ toField g, toField h, toField i, toField j, toField k, toField l,+ toField m, toField n, toField o]+ lengthMismatch :: Int -> Record -> Parser a lengthMismatch expected v = fail $ "cannot unpack array of length " ++@@ -677,6 +856,16 @@ instance ToField L.ByteString where toField = toStrict {-# INLINE toField #-}++#if MIN_VERSION_bytestring(0,10,4)+instance FromField SBS.ShortByteString where+ parseField = pure . SBS.toShort+ {-# INLINE parseField #-}++instance ToField SBS.ShortByteString where+ toField = SBS.fromShort+ {-# INLINE toField #-}+#endif -- | Assumes UTF-8 encoding. Fails on invalid byte sequences. instance FromField T.Text where
cassava.cabal view
@@ -1,5 +1,5 @@ Name: cassava-Version: 0.4.3.1+Version: 0.4.4.0 Synopsis: A CSV parsing and encoding library Description: A CSV parsing and encoding library optimized for ease of use and high@@ -17,6 +17,7 @@ Build-type: Simple Cabal-version: >=1.8 Extra-source-files: examples/*.hs+Tested-with: GHC == 7.10.2, GHC == 7.8.4, GHC == 7.6.3 Library Exposed-modules:@@ -92,7 +93,7 @@ Build-depends: array < 0.6,- attoparsec >= 0.10.2 && < 0.13,+ attoparsec >= 0.10.2 && < 0.14, base >= 4.5 && < 5, blaze-builder < 0.5, bytestring < 0.11,