binary-instances 1 → 1.0.6
raw patch · 12 files changed
Files
- CHANGELOG.md +27/−0
- binary-instances.cabal +49/−33
- src/Data/Binary/Instances.hs +1/−0
- src/Data/Binary/Instances/Aeson.hs +12/−2
- src/Data/Binary/Instances/Hashable.hs +0/−3
- src/Data/Binary/Instances/Primitive.hs +4/−0
- src/Data/Binary/Instances/Scientific.hs +0/−12
- src/Data/Binary/Instances/Tagged.hs +1/−1
- src/Data/Binary/Instances/Text.hs +0/−4
- src/Data/Binary/Instances/Time.hs +32/−7
- src/Data/Binary/Instances/UnorderedContainers.hs +4/−4
- test/Tests.hs +25/−5
CHANGELOG.md view
@@ -1,3 +1,30 @@+## 1.0.6++- Support GHC-9.12.1+- Fix a small bug QuarterOfYear instance++## 1.0.5++- Support GHC-8.6.5...9.10.1++## 1.0.4++- Add instances for `ByteArray` from `data-array-byte` or `base`+- Support `primitive-0.8`+- Support `tagged-0.8.7`++## 1.0.3++- Add instance for `primitive`s `ByteArray`.++## 1.0.2++- Support `aeson-2.0.0.0`++## 1.0.1++- Add instances for `time-1.11` types: `Month`, `Quarter`, `QuarterOfYear`+ ## 1 - **Breaking change** rename this package to `binary-instances`.
binary-instances.cabal view
@@ -1,60 +1,72 @@+cabal-version: 2.2 name: binary-instances-version: 1+version: 1.0.6 synopsis: Orphan instances for binary description:- `binary-orphans` defines orphan instances for types in some popular packages.+ `binary-instances` defines orphan instances for types in some popular packages. category: Web-homepage: https://github.com/phadej/binary-orphans#readme-bug-reports: https://github.com/phadej/binary-orphans/issues+homepage: https://github.com/haskellari/binary-instances#readme+bug-reports: https://github.com/haskellari/binary-instances/issues author: Oleg Grenrus <oleg.grenrus@iki.fi> maintainer: Oleg Grenrus <oleg.grenrus@iki.fi>-license: BSD3+license: BSD-3-Clause license-file: LICENSE build-type: Simple-cabal-version: >=1.10 tested-with:- GHC ==8.8.1 || ==8.6.5 || ==8.4.4 || ==8.2.2 || ==8.0.2 || ==7.10.3 || ==7.8.4 || ==7.6.3+ GHC ==8.6.5+ || ==8.8.4+ || ==8.10.7+ || ==9.0.2+ || ==9.2.8+ || ==9.4.8+ || ==9.6.6+ || ==9.8.4+ || ==9.10.1+ || ==9.12.2 -extra-source-files:- CHANGELOG.md+extra-source-files: CHANGELOG.md source-repository head type: git- location: https://github.com/phadej/binary-orphans+ location: https://github.com/haskellari/binary-instances library+ default-language: Haskell2010 hs-source-dirs: src build-depends:- aeson >=0.7.0.6 && <1.5- , base >=4.6.0.1 && <4.13- , binary >=0.5.1.1 && <0.8.7- , binary-orphans >=1.0.1 && <1.1- , case-insensitive >=1.2.0.4 && <1.2.2- , hashable >=1.2.3.3 && <1.4- , scientific >=0.3.3.8 && <0.4- , tagged >=0.7.3 && <0.8.7- , text >=1.2.0.6 && <1.3- , text-binary >=0.2.1.1 && <0.3- , time-compat >=1.9.2.2 && <1.10- , unordered-containers >=0.2.5.1 && <0.3- , vector >=0.10.12.3 && <0.13- , vector-binary-instances >=0.2.1.0 && <0.3+ , base >=4.6.0.1 && <4.22+ , binary >=0.5.1.1 && <0.8.10+ , text >=1.2.3.0 && <1.3 || >=2.0 && <2.2 + build-depends:+ , case-insensitive >=1.2.1.0 && <1.2.2+ , tagged >=0.8.8 && <0.8.10++ build-depends:+ , aeson ^>=2.2.2.0+ , binary-orphans ^>=1.0.5+ , hashable ^>=1.4.4.0 || ^>=1.5.0.0+ , primitive ^>=0.9.0.0+ , scientific ^>=0.3.8.0+ , time-compat ^>=1.9.7+ , unordered-containers ^>=0.2.20+ , vector ^>=0.13.1.0+ , vector-binary-instances ^>=0.2.5.2+ exposed-modules: Data.Binary.Instances Data.Binary.Instances.Aeson Data.Binary.Instances.CaseInsensitive+ Data.Binary.Instances.Hashable+ Data.Binary.Instances.Primitive Data.Binary.Instances.Scientific+ Data.Binary.Instances.Tagged Data.Binary.Instances.Text Data.Binary.Instances.Time- Data.Binary.Instances.Tagged- Data.Binary.Instances.Hashable Data.Binary.Instances.UnorderedContainers Data.Binary.Instances.Vector - default-language: Haskell2010- test-suite binary-instances-test default-language: Haskell2010 type: exitcode-stdio-1.0@@ -62,20 +74,24 @@ hs-source-dirs: test ghc-options: -Wall -fno-warn-orphans build-depends:- aeson+ , aeson , base , binary , binary-instances+ , bytestring , case-insensitive , hashable- , QuickCheck >=2.13.1 && <2.14- , quickcheck-instances >=0.3.21 && <0.4+ , primitive+ , QuickCheck ^>=2.14.3 || ^>=2.15.0.1+ , quickcheck-instances ^>=0.3.31 , scientific , tagged- , tasty >=0.10.1.2 && <1.3- , tasty-quickcheck >=0.8.3.2 && <0.11+ , tasty ^>=1.5+ , tasty-quickcheck ^>=0.10.3 || ^>=0.11 , text , time-compat , unordered-containers , vector + if impl(ghc >=8.0 && <9.4)+ build-depends: data-array-byte
src/Data/Binary/Instances.hs view
@@ -28,6 +28,7 @@ import Data.Binary.Instances.Aeson () import Data.Binary.Instances.CaseInsensitive () import Data.Binary.Instances.Hashable ()+import Data.Binary.Instances.Primitive () import Data.Binary.Instances.Scientific () import Data.Binary.Instances.Tagged () import Data.Binary.Instances.Text ()
src/Data/Binary/Instances/Aeson.hs view
@@ -1,7 +1,7 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.Binary.Instances.Aeson where -import Data.Binary (Binary, Get, get, put)+import Data.Binary (Binary, Get, get, put) import Data.Binary.Orphans () import Data.Binary.Instances.Scientific ()@@ -9,7 +9,9 @@ import Data.Binary.Instances.UnorderedContainers () import Data.Binary.Instances.Vector () -import qualified Data.Aeson as A+import qualified Data.Aeson as A+import qualified Data.Aeson.Key as Key+import qualified Data.Aeson.KeyMap as KM instance Binary A.Value where get = do@@ -29,3 +31,11 @@ put (A.Number v) = put (3 :: Int) >> put v put (A.Bool v) = put (4 :: Int) >> put v put A.Null = put (5 :: Int)++instance Binary Key.Key where+ get = Key.fromText <$> get+ put = put . Key.toText++instance Binary v => Binary (KM.KeyMap v) where+ get = fmap KM.fromList get+ put = put . KM.toList
src/Data/Binary/Instances/Hashable.hs view
@@ -1,14 +1,11 @@-{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.Binary.Instances.Hashable where import Data.Binary.Orphans () -#if MIN_VERSION_hashable(1,2,5) import Data.Binary (Binary, get, put) import qualified Data.Hashable as Hashable instance (Hashable.Hashable a, Binary a) => Binary (Hashable.Hashed a) where get = fmap Hashable.hashed get put = put . Hashable.unhashed-#endif
+ src/Data/Binary/Instances/Primitive.hs view
@@ -0,0 +1,4 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+module Data.Binary.Instances.Primitive where++import Data.Binary.Orphans ()
src/Data/Binary/Instances/Scientific.hs view
@@ -1,16 +1,4 @@-{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.Binary.Instances.Scientific where import Data.Binary.Orphans ()--#if !(MIN_VERSION_scientific(0,3,4))-import Control.Monad (liftM2)-import Data.Binary (Binary, Get, Put, get, put)--import qualified Data.Scientific as S--instance Binary S.Scientific where- get = liftM2 S.scientific get get- put s = put (S.coefficient s) >> put (S.base10Exponent s)-#endif
src/Data/Binary/Instances/Tagged.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} #if __GLASGOW_HASKELL__ >= 706 {-# LANGUAGE PolyKinds #-}
src/Data/Binary/Instances/Text.hs view
@@ -3,7 +3,3 @@ module Data.Binary.Instances.Text where import Data.Binary.Orphans ()--#if !(MIN_VERSION_text(1,2,1))-import Data.Text.Binary ()-#endif
src/Data/Binary/Instances/Time.hs view
@@ -6,12 +6,14 @@ import Data.Binary.Orphans () import Data.Word (Word8) -import qualified Data.Fixed as Fixed-import qualified Data.Time.Calendar.Compat as Time-import qualified Data.Time.Clock.Compat as Time-import qualified Data.Time.Clock.System.Compat as Time-import qualified Data.Time.Clock.TAI.Compat as Time-import qualified Data.Time.LocalTime.Compat as Time+import qualified Data.Fixed as Fixed+import qualified Data.Time.Calendar.Compat as Time+import qualified Data.Time.Calendar.Month.Compat as Time+import qualified Data.Time.Calendar.Quarter.Compat as Time+import qualified Data.Time.Clock.Compat as Time+import qualified Data.Time.Clock.System.Compat as Time+import qualified Data.Time.Clock.TAI.Compat as Time+import qualified Data.Time.LocalTime.Compat as Time instance Binary Time.Day where get = fmap Time.ModifiedJulianDay get@@ -84,4 +86,27 @@ 4 -> Time.Thursday 5 -> Time.Friday 6 -> Time.Saturday- _ -> error "panic: get @DayOfWeek"+ j -> error $ "panic: get @DayOfWeek: " ++ show (i, j)++instance Binary Time.Month where+ put (Time.MkMonth m) = put m+ get = fmap Time.MkMonth get++instance Binary Time.Quarter where+ put (Time.MkQuarter m) = put m+ get = fmap Time.MkQuarter get++instance Binary Time.QuarterOfYear where+ put Time.Q1 = put (1 :: Word8)+ put Time.Q2 = put (2 :: Word8)+ put Time.Q3 = put (3 :: Word8)+ put Time.Q4 = put (4 :: Word8)++ get = do+ i <- get+ return $ case mod (i :: Word8) 4 of+ 1 -> Time.Q1+ 2 -> Time.Q2+ 3 -> Time.Q3+ 0 -> Time.Q4+ j -> error $ "panic: get @QuarterOfYear: " ++ show (i, j)
src/Data/Binary/Instances/UnorderedContainers.hs view
@@ -1,12 +1,12 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.Binary.Instances.UnorderedContainers where -import Data.Binary (Binary, get, put)+import Data.Binary (Binary, get, put) import Data.Binary.Orphans () -import qualified Data.Hashable as Hashable-import qualified Data.HashMap.Lazy as HM-import qualified Data.HashSet as HS+import qualified Data.Hashable as Hashable+import qualified Data.HashMap.Lazy as HM+import qualified Data.HashSet as HS instance (Hashable.Hashable k, Eq k, Binary k, Binary v) => Binary (HM.HashMap k v) where get = fmap HM.fromList get
test/Tests.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} module Main (main) where @@ -10,6 +11,7 @@ import Test.Tasty (TestTree, defaultMain, testGroup) import Test.Tasty.QuickCheck (testProperty) +import Data.ByteString (ByteString) import Data.CaseInsensitive (CI) import Data.HashMap.Lazy (HashMap) import Data.HashSet (HashSet)@@ -21,12 +23,19 @@ import qualified Data.Vector.Unboxed as VU -import qualified Data.Time.Calendar.Compat as Time-import qualified Data.Time.Clock.Compat as Time-import qualified Data.Time.Clock.System.Compat as Time-import qualified Data.Time.Clock.TAI.Compat as Time-import qualified Data.Time.LocalTime.Compat as Time+import qualified Data.Primitive as Prim+import qualified Data.Time.Calendar.Compat as Time+import qualified Data.Time.Calendar.Month.Compat as Time+import qualified Data.Time.Calendar.Quarter.Compat as Time+import qualified Data.Time.Clock.Compat as Time+import qualified Data.Time.Clock.System.Compat as Time+import qualified Data.Time.Clock.TAI.Compat as Time+import qualified Data.Time.LocalTime.Compat as Time +#if MIN_VERSION_base(4,9,0)+import qualified Data.Array.Byte as AB+#endif+ main :: IO () main = defaultMain tests @@ -48,8 +57,15 @@ , roundtripProperty (undefined :: Time.TimeOfDay) , roundtripProperty (undefined :: Time.TimeZone) , roundtripProperty (undefined :: Time.UTCTime)+ , roundtripProperty (undefined :: Time.QuarterOfYear)+ , roundtripProperty (undefined :: Time.Quarter)+ , roundtripProperty (undefined :: Time.Month) -- case-insensitive & text+#if __GLASGOW_HASKELL__ <807+ -- https://github.com/haskell/text/issues/227 , roundtripProperty (undefined :: (CI Text))+#endif+ , roundtripProperty (undefined :: (CI ByteString)) -- semigroups / monoids , roundtripProperty (undefined :: (Sum Int)) -- tagged@@ -59,6 +75,10 @@ -- vector , roundtripProperty (undefined :: Vector Char) , roundtripProperty (undefined :: VU.Vector Char)+ , roundtripProperty (undefined :: Prim.ByteArray)+#if MIN_VERSION_base(4,9,0)+ , roundtripProperty (undefined :: AB.ByteArray)+#endif ] roundtrip :: (Eq a, Show a, Binary a) => a -> a -> Property