retroclash-lib-0.1.0: src/RetroClash/Stack.hs
module RetroClash.Stack where
import Clash.Prelude
data Stack n a = Stack (Vec n a) (Index n)
deriving (Generic, NFDataX, Show)
push :: (KnownNat n) => a -> Stack n a -> Stack n a
push x (Stack xs i) = Stack (replace i x xs) (i + 1)
pop :: (KnownNat n) => Stack n a -> (a, Stack n a)
pop (Stack xs i) = (xs !! (i - 1), Stack xs (i - 1))