{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} module HaskellWorks.Data.Vector.AsVector64ns ( AsVector64ns(..) ) where import Control.Applicative ((<$>)) import Data.Word import HaskellWorks.Data.Vector.AsVector8ns (asVector8ns) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS import qualified Data.Vector.Storable as DVS class AsVector64ns a where -- | Represent the value as a list of Vector of 'n' Word64 chunks. The last chunk will -- also be of the specified chunk size filled with trailing zeros. asVector64ns :: Int -> a -> [DVS.Vector Word64] instance AsVector64ns LBS.ByteString where asVector64ns n = asVector64ns n . LBS.toChunks {-# INLINE asVector64ns #-} instance AsVector64ns [BS.ByteString] where asVector64ns n bss = DVS.unsafeCast <$> asVector8ns (n * 8) bss {-# INLINE asVector64ns #-}