-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A typeclass and an implementation for double-ended queues. -- -- A typeclass for double-ended queues, and an implementation of Banker's -- Dequeues, as described in Chris Okasaki's Purely Functional Data -- Structures. @package dequeue @version 0.1.2 -- | A typeclass for double-ended queues, and an implementation of Banker's -- Dequeues, as described in Chris Okasaki's Purely Functional Data -- Structures. module Data.Dequeue -- | A typeclass for double-ended queues. class Dequeue q empty :: (Dequeue q) => q a null :: (Dequeue q) => q a -> Bool length :: (Dequeue q) => q a -> Int first :: (Dequeue q) => q a -> Maybe a last :: (Dequeue q) => q a -> Maybe a takeFront :: (Dequeue q) => Int -> q a -> [a] takeBack :: (Dequeue q) => Int -> q a -> [a] pushFront :: (Dequeue q) => q a -> a -> q a popFront :: (Dequeue q) => q a -> (Maybe a, q a) pushBack :: (Dequeue q) => q a -> a -> q a popBack :: (Dequeue q) => q a -> (Maybe a, q a) fromList :: (Dequeue q) => [a] -> q a -- | Validates that if you push, then pop, the front of the queue, you get -- the same queue. prop_pushpop_front :: (Dequeue q, Eq a, Eq (q a)) => q a -> a -> Bool -- | Validates that if you push, then pop, the back of the queue, you get -- the same queue. prop_pushpop_back :: (Dequeue q, Eq a, Eq (q a)) => q a -> a -> Bool -- | Validates that first returns the last pushFront'd -- element. prop_push_front :: (Dequeue q, Eq a) => q a -> a -> Bool -- | Validates that last returns the last pushBack'd -- element. prop_push_back :: (Dequeue q, Eq a) => q a -> a -> Bool -- | Validates that the last n pushed elements are returned by -- takeFront. prop_takeFront :: (Dequeue q, Eq a) => q a -> [a] -> Bool -- | Validates that the last n pushed elements are returned by -- takeBack. prop_takeBack :: (Dequeue q, Eq a) => q a -> [a] -> Bool -- | Validates that the length of a queue is the same as the length of the -- list generated from the queue. prop_length_toList :: (Dequeue q, Foldable q) => q a -> Bool -- | Validates that fromList . toList is the identity. prop_fromList_toList :: (Dequeue q, Foldable q, Eq (q a)) => q a -> Bool -- | An implementation of Banker's Dequeues, as described in Chris -- Okasaki's Purely Functional Data Structures. The functions for the -- Dequeue instance have the following complexities (where n is -- the length of the queue): -- -- data BankersDequeue a -- | Validates that if you push, then pop, the front of a -- BankersQueue, you get the same queue. prop_pushpop_front_bq :: BankersDequeue Int -> Int -> Bool -- | Validates that if you push, then pop, the back of a -- BankersDequeue, you get the same queue. prop_pushpop_back_bq :: BankersDequeue Int -> Int -> Bool -- | Validates that first returns the last pushFront'd -- element. prop_push_front_bq :: BankersDequeue Int -> Int -> Bool -- | Validates that last returns the last pushBack'd -- element. prop_push_back_bq :: BankersDequeue Int -> Int -> Bool -- | Validates that the last n pushed elements are returned by -- takeFront. prop_takeFront_bq :: BankersDequeue Int -> [Int] -> Bool -- | Validates that the last n pushed elements are returned by -- takeBack. prop_takeBack_bq :: BankersDequeue Int -> [Int] -> Bool -- | Validates that the length of a BankersDequeue is the same as -- the length of the list generated from the queue. prop_length_toList_bq :: BankersDequeue Int -> Bool -- | Validates that fromList . toList is the identity for a -- BankersDequeue. prop_fromList_toList_bq :: BankersDequeue Int -> Bool -- | Validates that a BankersDequeue remains balanced despite -- repeated pushes to the front. prop_push_front_bq_balance :: BankersDequeue Int -> Int -> Bool -- | Validates that a BankersDequeue remains balanced despite -- repeated pushes to the back. prop_push_back_bq_balance :: BankersDequeue Int -> Int -> Bool -- | Validates that a BankersDequeue remains balanced despite -- repeated pops from the front. prop_pop_front_bq_balance :: BankersDequeue Int -> Int -> Bool -- | Validates that a BankersDequeue remains balanced despite -- repeated pops from the back. prop_pop_back_bq_balance :: BankersDequeue Int -> Int -> Bool instance (Show a) => Show (BankersDequeue a) instance (Eq a) => Eq (BankersDequeue a) instance (Arbitrary a) => Arbitrary (BankersDequeue a) instance Dequeue BankersDequeue instance Foldable BankersDequeue instance Functor BankersDequeue