1 implementation module StdStack
11 push :: a (Stack a) -> (Stack a)
14 pop :: (Stack a) -> (Stack a)
18 popn :: Int (Stack a) -> (Stack a)
20 popn n s = popn (n-1) (pop s)
22 pushes :: [a] (Stack a) -> (Stack a)
24 pushes a s = pushes (tl a) (push (hd a) s)
27 top [] = abort "`top s` with s = []"
30 topn :: Int (Stack a) -> [a]
32 | n > length s = abort "`topn n s` with n > length s"
33 | otherwise = take n s
35 count :: (Stack a) -> Int
38 elements :: (Stack a) -> [a]
41 Start = ( "s0 = newStack = ", s0,'\n'
42 , "s1 = push 1 s0 = ", s1,'\n'
43 , "s2 = pushes [2..5] s1 = ",s2,'\n'
44 , "s3 = pop s2 = ", s3,'\n'
45 , "s4 = popn 3 s3 = ", s4,'\n'
46 , "s5 = top s4 = ", s5,'\n'
47 , "s6 = topn 3 s2 = ", s6,'\n'
48 , "s7 = elements s2 = ", s7,'\n'
49 // , "s8 = push 10 s1 = ", s8,'\n'
50 // , "s9 = popn 10 s8 = ", s9,'\n'
51 // , "sa = topn 5 s4 = ", sa,'\n'
52 // , "sb = top s0 = ", sb,'\n'