Skip to content

Commit 0a7cc8c

Browse files
committed
Add instance for primitive's ByteArray
1 parent 8aa9f11 commit 0a7cc8c

File tree

5 files changed

+38
-1
lines changed

5 files changed

+38
-1
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.3
2+
3+
- Add instance for `primitive`s `ByteArray`.
4+
15
## 1.0.2
26

37
- Support `aeson-2.0.0.0`

binary-instances.cabal

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ library
4343
, binary-orphans >=1.0.3 && <1.1
4444
, case-insensitive >=1.2.0.4 && <1.2.2
4545
, hashable >=1.2.3.3 && <1.5
46+
, primitive >=0.7.2.0 && <0.8
4647
, scientific >=0.3.3.8 && <0.4
4748
, tagged >=0.7.3 && <0.8.7
4849
, text >=1.2.0.6 && <1.3 || >=2.0 && <2.1
@@ -57,6 +58,7 @@ library
5758
Data.Binary.Instances.Aeson
5859
Data.Binary.Instances.CaseInsensitive
5960
Data.Binary.Instances.Hashable
61+
Data.Binary.Instances.Primitive
6062
Data.Binary.Instances.Scientific
6163
Data.Binary.Instances.Tagged
6264
Data.Binary.Instances.Text
@@ -78,8 +80,9 @@ test-suite binary-instances-test
7880
, bytestring
7981
, case-insensitive
8082
, hashable
83+
, primitive
8184
, QuickCheck >=2.13.1 && <2.15
82-
, quickcheck-instances >=0.3.25 && <0.4
85+
, quickcheck-instances >=0.3.28 && <0.4
8386
, scientific
8487
, tagged
8588
, tasty >=0.10.1.2 && <1.5

src/Data/Binary/Instances.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import Data.Binary.Orphans ()
2828
import Data.Binary.Instances.Aeson ()
2929
import Data.Binary.Instances.CaseInsensitive ()
3030
import Data.Binary.Instances.Hashable ()
31+
import Data.Binary.Instances.Primitive ()
3132
import Data.Binary.Instances.Scientific ()
3233
import Data.Binary.Instances.Tagged ()
3334
import Data.Binary.Instances.Text ()
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{-# LANGUAGE CPP #-}
2+
{-# OPTIONS_GHC -fno-warn-orphans #-}
3+
module Data.Binary.Instances.Primitive where
4+
5+
import Data.Binary.Orphans ()
6+
7+
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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import Data.Vector (Vector)
2323

2424
import qualified Data.Vector.Unboxed as VU
2525

26+
import qualified Data.Primitive as Prim
2627
import qualified Data.Time.Calendar.Compat as Time
2728
import qualified Data.Time.Calendar.Month.Compat as Time
2829
import qualified Data.Time.Calendar.Quarter.Compat as Time
@@ -70,6 +71,7 @@ tests = testGroup "Roundtrip"
7071
-- vector
7172
, roundtripProperty (undefined :: Vector Char)
7273
, roundtripProperty (undefined :: VU.Vector Char)
74+
, roundtripProperty (undefined :: Prim.ByteArray)
7375
]
7476

7577
roundtrip :: (Eq a, Show a, Binary a) => a -> a -> Property

0 commit comments

Comments
 (0)