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