packages feed

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))