module Data.Queue.Queue (Queue) where
import Data.Monoid
import Data.Queue.Class
import Data.Sequence (Seq, ViewL (..), viewl, (|>))
import qualified Data.Sequence as Seq
import qualified Data.Foldable as Fold
import Prelude hiding (null)
newtype Queue e = Queue (Seq e) deriving (Monoid, Fold.Foldable, Functor)
instance IQueue (Queue e) where
type QueueKey (Queue e) = e
empty = mempty
singleton = Queue . Seq.singleton
fromList = Queue . Seq.fromList
null (Queue q) = Seq.null q
size (Queue q) = Seq.length q
x `insert` Queue q = Queue (q |> x)
extract (Queue q) = case viewl q of
EmptyL -> Nothing
x :< q' -> Just (x, Queue q')
merge = mappend
mergeAll = mconcat
toList = Fold.toList