-- Queues1.lhs -- An abstract data type of queues, implemented as a list, with -- new elements added at the end of the list. -- -- (c) Simon Thompson, 1998. -- module Queue ( Queue , emptyQ , -- Queue a isEmptyQ , -- Queue a -> Bool addQ , -- a -> Queue a -> Queue a remQ -- Queue a -> ( a , Queue a ) ) where newtype Queue a = Qu [a] -- emptyQ :: Queue a emptyQ = Qu [] isEmptyQ :: Queue a -> Bool isEmptyQ (Qu []) = True isEmptyQ _ = False addQ :: a -> Queue a -> Queue a addQ x (Qu xs) = Qu (xs++[x]) remQ :: Queue a -> ( a , Queue a ) remQ q@(Qu xs) | not (isEmptyQ q) = (head xs , Qu (tail xs)) | otherwise = error "remQ"