packages feed

binrep-0.2.0: src/Binrep/Type/Vector.hs

-- | Sized vectors.

{-# LANGUAGE NoStarIsType #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Binrep.Type.Vector where

import Binrep
import Data.Vector.Sized qualified as V
import Data.Vector.Sized ( Vector )
import GHC.TypeNats

type instance CBLen (Vector n a) = CBLen a * n

instance BLen a => BLen (Vector n a) where
    blen = V.sum . V.map blen

instance Put a => Put (Vector n a) where
    put = mconcat . V.toList . V.map put

instance (Get a, KnownNat n) => Get (Vector n a) where
    get = getVector get

getVector :: KnownNat n => Getter a -> Getter (Vector n a)
getVector g = V.replicateM g