{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Binary.Instances.Primitive where
import Data.Binary.Orphans ()
#if !MIN_VERSION_primitive(0,8,0)
import Control.Monad (replicateM)
import Data.Binary (Binary, Get, Put, get, put)
import Data.Word (Word8)
import qualified Data.Primitive as Prim
instance Binary Prim.ByteArray where
put ba = put maxI >> go 0
where
maxI :: Int
maxI = Prim.sizeofByteArray ba
go :: Int -> Put
go i | i < maxI = put (Prim.indexByteArray ba i :: Word8) >> go (i + 1)
| otherwise = return ()
get = do
len <- get
xs <- replicateM len get
return (Prim.byteArrayFromListN len (xs :: [Word8]))
#endif