summaryrefslogtreecommitdiff
path: root/Stack.hs
blob: 2b369b796bdb03716b3934143934b3142cb4a6da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module Stack (
	Stack,
    empty,
    at,
    pop,
    (<:>)
    ) where


import Data.List


data Stack a = Stack [a]


instance Show a => Show (Stack a) where
    show (Stack x)   =   "Stack:\n" ++ intercalate "\n" (map (show) x) ++ "\n\n"


infixr 9 <:>


empty :: Stack a
empty = Stack []


at :: Stack a -> Int -> Maybe a
at (Stack list) index =
    if (index < length list && index >= 0)
    then Just (list!!index)
    else Nothing


pop :: Int -> Stack a -> Stack a
pop n (Stack list) = Stack (drop n list)


(<:>) :: a -> Stack a -> Stack a
x <:> (Stack list) = Stack (x : list)