module Queue(QUEUE, qmember, isempty, qremove, enter, empty) where data QUEUE a = Queue [a] [a] deriving (Eq, Ord) empty = Queue [] [] enter (Queue outl' inl) x = Queue outl' (x : inl) isempty (Queue [] []) = True isempty _ = False qremove (Queue (a : outl') inl) = Just (a, Queue outl' inl) qremove (Queue [] []) = Nothing --error "qremove from empty queue" qremove (Queue [] inl) = qremove (Queue (reverse inl) []) qmember (Queue outl' inl) x = x `elem` outl' || x `elem` inl