1 2 3 4 5 6 7 8 module Queue( 9 Queue, createQueue, addFront, addBack, 10 addAllFront, addAllBack, inquireFront, 11 inquireBack, removeFront, removeBack, 12 emptyQueue 13 ) where 14 15 16 17 type Queue a = [a] 18 19 20 21 createQueue::Queue a 22 createQueue = [] 23 24 addFront::a -> Queue a -> Queue a 25 addFront x q = x:q 26 27 addBack::a -> Queue a -> Queue a 28 addBack x q = q ++ [x] 29 30 addAllFront::[a] -> Queue a -> Queue a 31 addAllFront list q = list ++ q 32 33 addAllBack::[a] -> Queue a -> Queue a 34 addAllBack list q = q ++ list 35 36 inquireFront::Queue a -> a 37 inquireFront [] = error "Cannot inquire on empty Queue" 38 inquireFront (h:t) = h 39 40 inquireBack::Queue a -> a 41 inquireBack [] = error "Cannot inquire on empty Queue" 42 inquireBack [x] = x 43 inquireBack (x:xs) = inquireBack xs 44 45 removeFront::Queue a -> Queue a 46 removeFront [] = error "Cannot remove from an empty Queue" 47 removeFront (h:t) = t 48 49 removeBack::Queue a -> Queue a 50 removeBack [] = error "Cannot inquire on empty Queue" 51 removeBack [x] = [] 52 removeBack (x:xs) = x:(removeBack xs) 53 54 emptyQueue::(Eq a) => Queue a -> Bool 55 emptyQueue x = x==[] 56 57 sizeQueue::Queue b -> Int 58 sizeQueue xs = length xs 59 60