-- Implementation of the Stack ADT in Haskell module Stack (Stack, empty, push, pop) where data Stack a = MkStack [a] empty :: Stack a empty = MkStack [] push :: a -> Stack a -> Stack a push a (MkStack s) = MkStack (a:s) pop :: Stack a -> Maybe (a, Stack a) pop (MkStack []) = Nothing pop (MkStack (a:s)) = Just (a, MkStack s)