hw-simd-cli-0.0.0.1: src/HaskellWorks/Simd/Cli/ChunkData.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeApplications #-}
module HaskellWorks.Simd.Cli.ChunkData where
import Control.Lens
import Data.Generics.Product.Any
import GHC.Generics
import qualified Data.ByteString as BS
import qualified Data.Map as M
data ChunkData = ChunkData
{ count :: Int
, sizes :: M.Map Int Int
} deriving (Show, Generic)
instance Semigroup ChunkData where
a <> b = ChunkData
{ count = a ^. the @"count" + b ^. the @"count"
, sizes = M.unionWith (+) (a ^. the @"sizes") (b ^. the @"sizes")
}
instance Monoid ChunkData where
mempty = ChunkData 0 M.empty
chunkDataOf :: BS.ByteString -> ChunkData
chunkDataOf bs = ChunkData
{ count = 1
, sizes = M.singleton (BS.length bs) 1
}