{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module HaskellWorks.Data.Bits.ElemFixedBitSize
( ElemFixedBitSize(..)
) where
import Data.Word
import HaskellWorks.Data.Positioning
import qualified Data.Bit as Bit
import qualified Data.Bit.ThreadSafe as BitTS
import qualified Data.Vector as DV
import qualified Data.Vector.Storable as DVS
import qualified Data.Vector.Unboxed as DVU
class ElemFixedBitSize v where
type Elem v
elemFixedBitSize :: v -> Count
instance ElemFixedBitSize [Bool] where
type Elem [Bool] = Bool
elemFixedBitSize :: [Bool] -> Count
elemFixedBitSize [Bool]
_ = Count
1
instance ElemFixedBitSize [Word8] where
type Elem [Word8] = Word8
elemFixedBitSize :: [Word8] -> Count
elemFixedBitSize [Word8]
_ = Count
8
instance ElemFixedBitSize [Word16] where
type Elem [Word16] = Word16
elemFixedBitSize :: [Word16] -> Count
elemFixedBitSize [Word16]
_ = Count
16
instance ElemFixedBitSize [Word32] where
type Elem [Word32] = Word32
elemFixedBitSize :: [Word32] -> Count
elemFixedBitSize [Word32]
_ = Count
32
instance ElemFixedBitSize [Word64] where
type Elem [Word64] = Word64
elemFixedBitSize :: [Count] -> Count
elemFixedBitSize [Count]
_ = Count
64
instance ElemFixedBitSize (DV.Vector Bool) where
type Elem (DV.Vector Bool) = Bool
elemFixedBitSize :: Vector Bool -> Count
elemFixedBitSize Vector Bool
_ = Count
1
instance ElemFixedBitSize (DV.Vector Word8) where
type Elem (DV.Vector Word8) = Word8
elemFixedBitSize :: Vector Word8 -> Count
elemFixedBitSize Vector Word8
_ = Count
8
instance ElemFixedBitSize (DV.Vector Word16) where
type Elem (DV.Vector Word16) = Word16
elemFixedBitSize :: Vector Word16 -> Count
elemFixedBitSize Vector Word16
_ = Count
16
instance ElemFixedBitSize (DV.Vector Word32) where
type Elem (DV.Vector Word32) = Word32
elemFixedBitSize :: Vector Word32 -> Count
elemFixedBitSize Vector Word32
_ = Count
32
instance ElemFixedBitSize (DV.Vector Word64) where
type Elem (DV.Vector Word64) = Word64
elemFixedBitSize :: Vector Count -> Count
elemFixedBitSize Vector Count
_ = Count
64
instance ElemFixedBitSize (DVS.Vector Bool) where
type Elem (DVS.Vector Bool) = Bool
elemFixedBitSize :: Vector Bool -> Count
elemFixedBitSize Vector Bool
_ = Count
1
instance ElemFixedBitSize (DVS.Vector Word8) where
type Elem (DVS.Vector Word8) = Word8
elemFixedBitSize :: Vector Word8 -> Count
elemFixedBitSize Vector Word8
_ = Count
8
instance ElemFixedBitSize (DVS.Vector Word16) where
type Elem (DVS.Vector Word16) = Word16
elemFixedBitSize :: Vector Word16 -> Count
elemFixedBitSize Vector Word16
_ = Count
16
instance ElemFixedBitSize (DVS.Vector Word32) where
type Elem (DVS.Vector Word32) = Word32
elemFixedBitSize :: Vector Word32 -> Count
elemFixedBitSize Vector Word32
_ = Count
32
instance ElemFixedBitSize (DVS.Vector Word64) where
type Elem (DVS.Vector Word64) = Word64
elemFixedBitSize :: Vector Count -> Count
elemFixedBitSize Vector Count
_ = Count
64
instance ElemFixedBitSize (DVU.Vector Bit.Bit) where
type Elem (DVU.Vector Bit.Bit) = Bit.Bit
elemFixedBitSize :: Vector Bit -> Count
elemFixedBitSize Vector Bit
_ = Count
1
instance ElemFixedBitSize (DVU.Vector BitTS.Bit) where
type Elem (DVU.Vector BitTS.Bit) = BitTS.Bit
elemFixedBitSize :: Vector Bit -> Count
elemFixedBitSize Vector Bit
_ = Count
1