module Ham.Internal.FixedSequence
(FixedSequence
,addElement
,toList
,emptyFS)
where
import qualified Data.Sequence as S
import qualified Data.Foldable as F (toList)
data FixedSequence a = FixedSequence Int (S.Seq a)
addElement :: a -> FixedSequence a -> FixedSequence a
addElement a (FixedSequence n s) = result
where l = S.length s
result | l < n = FixedSequence n (a S.<| s)
| otherwise = FixedSequence n (a S.<| s')
s' = S.take (n - 1) s
toList :: FixedSequence a -> [a]
toList (FixedSequence n s) = F.toList s
emptyFS n = FixedSequence n S.empty