packages feed

fixed-vector-cereal-2.1.0.0: Data/Vector/Fixed/Instances/Cereal.hs

{-# LANGUAGE DerivingVia          #-}
{-# LANGUAGE FlexibleContexts     #-}
{-# LANGUAGE StandaloneDeriving   #-}
{-# LANGUAGE TypeFamilies         #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Module with cereal instances for data types defined in fixed
--   vector
module Data.Vector.Fixed.Instances.Cereal where

import           Data.Vector.Fixed             (Arity,ArityPeano,ViaFixed(..),Vector)
import qualified Data.Vector.Fixed           as F
import qualified Data.Vector.Fixed.Boxed     as FB
import qualified Data.Vector.Fixed.Strict    as FF
import qualified Data.Vector.Fixed.Unboxed   as FU
import qualified Data.Vector.Fixed.Primitive as FP
import qualified Data.Vector.Fixed.Storable  as FS
import qualified Data.Vector.Fixed.Mono      as FM
import           Data.Serialize                (Serialize(..))


instance (Vector v a, Serialize a) => Serialize (ViaFixed v a) where
  put = F.mapM_ put
  get = F.replicateM get
  {-# INLINE put #-}
  {-# INLINE get #-}

instance (FM.Prod a v, Serialize a) => Serialize (FM.ViaFixed a v) where
  put = FM.mapM_ put
  get = FM.replicateM get
  {-# INLINE put #-}
  {-# INLINE get #-}

deriving via ViaFixed (FB.Vec n) a instance (Arity n, Serialize a)                => Serialize (FB.Vec n a)
deriving via ViaFixed (FF.Vec n) a instance (Arity n, Serialize a)                => Serialize (FF.Vec n a)
deriving via ViaFixed (FP.Vec n) a instance (Arity n, Serialize a, FP.Prim a)     => Serialize (FP.Vec n a)
deriving via ViaFixed (FS.Vec n) a instance (Arity n, Serialize a, FS.Storable a) => Serialize (FS.Vec n a)
deriving via ViaFixed (FU.Vec n) a instance (Arity n, Serialize a, FU.Unbox n a)  => Serialize (FU.Vec n a)

deriving via ViaFixed (F.VecList  n) a instance (Arity n,      Serialize a) => Serialize (F.VecList  n a)
deriving via ViaFixed (F.VecPeano n) a instance (ArityPeano n, Serialize a) => Serialize (F.VecPeano n a)

instance (Serialize a) => Serialize (F.Only a) where
  put (F.Only a) = put a
  get = F.Only `fmap` get

instance Serialize (F.Empty a) where
  put _ = return ()
  get = return F.Empty