module GHC.Data.SizedSeq
( SizedSeq(..)
, emptySS
, addToSS
, ssElts
, sizeSS
) where
import Prelude
data SizedSeq a = SizedSeq {-# UNPACK #-} !Word [a]
emptySS :: SizedSeq a
emptySS :: forall a. SizedSeq a
emptySS = Word -> [a] -> SizedSeq a
forall a. Word -> [a] -> SizedSeq a
SizedSeq Word
0 []
addToSS :: SizedSeq a -> a -> SizedSeq a
addToSS :: forall a. SizedSeq a -> a -> SizedSeq a
addToSS (SizedSeq Word
n [a]
r_xs) a
x = Word -> [a] -> SizedSeq a
forall a. Word -> [a] -> SizedSeq a
SizedSeq (Word
nWord -> Word -> Word
forall a. Num a => a -> a -> a
+Word
1) (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
r_xs)
ssElts :: SizedSeq a -> [a]
ssElts :: forall a. SizedSeq a -> [a]
ssElts (SizedSeq Word
_ [a]
r_xs) = [a] -> [a]
forall a. [a] -> [a]
reverse [a]
r_xs
sizeSS :: SizedSeq a -> Word
sizeSS :: forall a. SizedSeq a -> Word
sizeSS (SizedSeq Word
n [a]
_) = Word
n