data Queue a = Queue [a]empty :: Queue aempty = Queue [] push :: a -> Queue a -> Queue apush a (Queue as) = Queue (a:as)pop :: Queue a -> Maybe (a, Queue a)pop (Queue []) = Nothingpop (Queue (a:as)) = Just (a, Queue as)