logict-sequence-0.2.0.2: A backtracking logic-programming monad with asymptotic improvements to msplit
Safe HaskellTrustworthy
LanguageHaskell2010

Control.Monad.Logic.Sequence.Internal.Queue

Description

Based on the LogicT improvements in the paper, Reflection without Remorse. Code is based on the code provided in: https://github.com/atzeus/reflectionwithoutremorse

Note: that code is provided under an MIT license, so we use that as well.

Synopsis

Documentation

data Queue a Source #

A peculiarly lazy catenable queue. Note that appending multiple empty queues to a non-empty queue can break the amortized constant bound for viewl in the persistent case.

Contextual note: We could actually make these *non-empty* catenable queues, in which case the wonkiness around appending empty would go away. In SeqT, SeqT Empty is really just an optimized representation of

SeqT (singleton (pure Empty))

where the Empty in the latter is an empty ViewT.

Instances

Instances details
Foldable Queue Source # 
Instance details

Defined in Control.Monad.Logic.Sequence.Internal.Queue

Methods

fold :: Monoid m => Queue m -> m #

foldMap :: Monoid m => (a -> m) -> Queue a -> m #

foldMap' :: Monoid m => (a -> m) -> Queue a -> m #

foldr :: (a -> b -> b) -> b -> Queue a -> b #

foldr' :: (a -> b -> b) -> b -> Queue a -> b #

foldl :: (b -> a -> b) -> b -> Queue a -> b #

foldl' :: (b -> a -> b) -> b -> Queue a -> b #

foldr1 :: (a -> a -> a) -> Queue a -> a #

foldl1 :: (a -> a -> a) -> Queue a -> a #

toList :: Queue a -> [a] #

null :: Queue a -> Bool #

length :: Queue a -> Int #

elem :: Eq a => a -> Queue a -> Bool #

maximum :: Ord a => Queue a -> a #

minimum :: Ord a => Queue a -> a #

sum :: Num a => Queue a -> a #

product :: Num a => Queue a -> a #

Traversable Queue Source # 
Instance details

Defined in Control.Monad.Logic.Sequence.Internal.Queue

Methods

traverse :: Applicative f => (a -> f b) -> Queue a -> f (Queue b) #

sequenceA :: Applicative f => Queue (f a) -> f (Queue a) #

mapM :: Monad m => (a -> m b) -> Queue a -> m (Queue b) #

sequence :: Monad m => Queue (m a) -> m (Queue a) #

Functor Queue Source # 
Instance details

Defined in Control.Monad.Logic.Sequence.Internal.Queue

Methods

fmap :: (a -> b) -> Queue a -> Queue b #

(<$) :: a -> Queue b -> Queue a #

Sequence Queue Source # 
Instance details

Defined in Control.Monad.Logic.Sequence.Internal.Queue

Methods

empty :: Queue c #

singleton :: c -> Queue c #

(><) :: Queue c -> Queue c -> Queue c #

viewl :: Queue c -> ViewL Queue c #

viewr :: Queue c -> ViewR Queue c #

(|>) :: Queue c -> c -> Queue c #

(<|) :: c -> Queue c -> Queue c #

fromList :: [c] -> Queue c #

Monoid (Queue a) Source # 
Instance details

Defined in Control.Monad.Logic.Sequence.Internal.Queue

Methods

mempty :: Queue a #

mappend :: Queue a -> Queue a -> Queue a #

mconcat :: [Queue a] -> Queue a #

Semigroup (Queue a) Source # 
Instance details

Defined in Control.Monad.Logic.Sequence.Internal.Queue

Methods

(<>) :: Queue a -> Queue a -> Queue a #

sconcat :: NonEmpty (Queue a) -> Queue a #

stimes :: Integral b => b -> Queue a -> Queue a #