module Data.Hash.SL2.Chunk where

import Data.ByteString
import Data.Hash.SL2
import Data.Monoid

data Chunk = Chunk
  { getChunkHash :: Hash
  , getChunkBytes :: ByteString
  }

instance Eq Chunk where
  a == b = getChunkHash a == getChunkHash b

instance Ord Chunk where
  compare a b = compare (getChunkHash a) (getChunkHash b)

instance Monoid Chunk where
  mempty = Chunk mempty mempty
  mappend a b = Chunk (getChunkHash a <> getChunkHash b) (getChunkBytes a <> getChunkBytes b)
  mconcat as = Chunk (mconcat $ fmap getChunkHash as) (mconcat $ fmap getChunkBytes as)

fromByteString :: ByteString -> Chunk
fromByteString b = Chunk (hash b) b