There was an error while loading. Please reload this page.
1 parent 8aa9f11 commit 0a7cc8cCopy full SHA for 0a7cc8c
CHANGELOG.md
@@ -1,3 +1,7 @@
1
+## 1.0.3
2
+
3
+- Add instance for `primitive`s `ByteArray`.
4
5
## 1.0.2
6
7
- Support `aeson-2.0.0.0`
binary-instances.cabal
@@ -43,6 +43,7 @@ library
43
, binary-orphans >=1.0.3 && <1.1
44
, case-insensitive >=1.2.0.4 && <1.2.2
45
, hashable >=1.2.3.3 && <1.5
46
+ , primitive >=0.7.2.0 && <0.8
47
, scientific >=0.3.3.8 && <0.4
48
, tagged >=0.7.3 && <0.8.7
49
, text >=1.2.0.6 && <1.3 || >=2.0 && <2.1
@@ -57,6 +58,7 @@ library
57
58
Data.Binary.Instances.Aeson
59
Data.Binary.Instances.CaseInsensitive
60
Data.Binary.Instances.Hashable
61
+ Data.Binary.Instances.Primitive
62
Data.Binary.Instances.Scientific
63
Data.Binary.Instances.Tagged
64
Data.Binary.Instances.Text
@@ -78,8 +80,9 @@ test-suite binary-instances-test
78
80
, bytestring
79
81
, case-insensitive
82
, hashable
83
+ , primitive
84
, QuickCheck >=2.13.1 && <2.15
- , quickcheck-instances >=0.3.25 && <0.4
85
+ , quickcheck-instances >=0.3.28 && <0.4
86
, scientific
87
, tagged
88
, tasty >=0.10.1.2 && <1.5
src/Data/Binary/Instances.hs
@@ -28,6 +28,7 @@ import Data.Binary.Orphans ()
28
import Data.Binary.Instances.Aeson ()
29
import Data.Binary.Instances.CaseInsensitive ()
30
import Data.Binary.Instances.Hashable ()
31
+import Data.Binary.Instances.Primitive ()
32
import Data.Binary.Instances.Scientific ()
33
import Data.Binary.Instances.Tagged ()
34
import Data.Binary.Instances.Text ()
src/Data/Binary/Instances/Primitive.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Data.Binary.Instances.Primitive where
+import Data.Binary.Orphans ()
+import Control.Monad (replicateM)
8
+import Data.Binary (Binary, Get, Put, get, put)
9
+import Data.Word (Word8)
10
11
+import qualified Data.Primitive as Prim
12
13
+-- | @since 1.0.3
14
+instance Binary Prim.ByteArray where
15
+ put ba = put maxI >> go 0
16
+ where
17
+ maxI :: Int
18
+ maxI = Prim.sizeofByteArray ba
19
20
+ go :: Int -> Put
21
+ go i | i < maxI = put (Prim.indexByteArray ba i :: Word8) >> go (i + 1)
22
+ | otherwise = return ()
23
24
+ get = do
25
+ len <- get
26
+ xs <- replicateM len get
27
+ return (Prim.byteArrayFromListN len (xs :: [Word8]))
test/Tests.hs
@@ -23,6 +23,7 @@ import Data.Vector (Vector)
import qualified Data.Vector.Unboxed as VU
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
@@ -70,6 +71,7 @@ tests = testGroup "Roundtrip"
70
71
-- vector
72
, roundtripProperty (undefined :: Vector Char)
73
, roundtripProperty (undefined :: VU.Vector Char)
74
+ , roundtripProperty (undefined :: Prim.ByteArray)
75
]
76
77
roundtrip :: (Eq a, Show a, Binary a) => a -> a -> Property
0 commit comments