{-# LANGUAGE StandaloneDeriving, DeriveGeneric #-}moduleSizedSeq(SizedSeq (..),emptySS ,addToSS ,addListToSS ,ssElts ,sizeSS )whereimportPrelude-- See note [Why do we import Prelude here?]importControl.DeepSeqimportData.BinaryimportData.ListimportGHC.GenericsdataSizedSeq a =SizedSeq {-# UNPACK#-}!Word[a ]deriving(Generic,Show)instanceFunctorSizedSeq wherefmap f (SizedSeq sz l )=SizedSeq sz (fmapf l )instanceFoldableSizedSeq wherefoldr f c ss =foldrf c (ssElts ss )instanceTraversableSizedSeq wheretraverse f (SizedSeq sz l )=SizedSeq sz .reverse<$>traversef (reversel )instanceBinarya =>Binary(SizedSeq a )instanceNFDataa =>NFData(SizedSeq a )wherernf (SizedSeq _xs )=rnfxs emptySS::SizedSeq a emptySS =SizedSeq 0[]addToSS::SizedSeq a ->a ->SizedSeq a addToSS (SizedSeq n r_xs )x =SizedSeq (n +1)(x :r_xs )addListToSS::SizedSeq a ->[a ]->SizedSeq a addListToSS (SizedSeq n r_xs )xs =SizedSeq (n +genericLengthxs )(reversexs ++r_xs )ssElts::SizedSeq a ->[a ]ssElts (SizedSeq _r_xs )=reverser_xs sizeSS::SizedSeq a ->WordsizeSS (SizedSeq n _)=n