elm-make-0.1: src/Utils/Queue.hs
module Utils.Queue where
newtype Queue a =
Queue ([a], [a])
empty :: Queue a
empty =
Queue ([],[])
fromList :: [a] -> Queue a
fromList list =
Queue (list, [])
size :: Queue a -> Int
size (Queue (front, back)) =
length front + length back
enqueue :: [a] -> Queue a -> Queue a
enqueue names (Queue (front, back)) =
Queue (front, names ++ back)
dequeue :: Int -> Queue a -> ([a], Queue a)
dequeue n queue =
dequeueHelp [] n queue
dequeueHelp :: [a] -> Int -> Queue a -> ([a], Queue a)
dequeueHelp results n queue@(Queue (front, back)) =
case n of
0 -> (results, queue)
_ ->
case (front, back) of
([], []) -> (results, queue)
([], _) -> dequeueHelp results n (Queue (reverse back, []))
(x:xs, _) -> dequeueHelp (x:results) (n-1) (Queue (xs, back))