creditmonad-1.0.0: Reasoning about amortized time complexity
Safe HaskellNone
LanguageGHC2021

Test.Credit.Heap.Scheduled

Synopsis

Documentation

data Stream (m :: Type -> Type) a Source #

Constructors

SCons a (Stream m a) 
SNil 
SIndirect (Thunk m (Lazy m) (Stream m a)) 

Instances

Instances details
(MonadMemory m, MemoryCell m a) => MemoryCell m (Stream m a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

prettyCell :: Stream m a -> m Memory Source #

indirect :: MonadCredit m => m (Stream m a) -> m (Stream m a) Source #

credit :: MonadCredit m => Credit -> Stream m a -> m () Source #

smatch Source #

Arguments

:: MonadCredit m 
=> Stream m a

Scrutinee

-> m b

Nil case

-> (a -> Stream m a -> m b)

Cons case

-> m b 

Smart destructor for streams, consuming one credit

data Tree a Source #

Constructors

Node a [Tree a] 

Instances

Instances details
MemoryCell m a => MemoryCell m (Tree a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

prettyCell :: Tree a -> m Memory Source #

Show a => Show (Tree a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

showsPrec :: Int -> Tree a -> ShowS #

show :: Tree a -> String #

showList :: [Tree a] -> ShowS #

Eq a => Eq (Tree a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

(==) :: Tree a -> Tree a -> Bool #

(/=) :: Tree a -> Tree a -> Bool #

Ord a => Ord (Tree a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

compare :: Tree a -> Tree a -> Ordering #

(<) :: Tree a -> Tree a -> Bool #

(<=) :: Tree a -> Tree a -> Bool #

(>) :: Tree a -> Tree a -> Bool #

(>=) :: Tree a -> Tree a -> Bool #

max :: Tree a -> Tree a -> Tree a #

min :: Tree a -> Tree a -> Tree a #

data Digit a Source #

Constructors

Zero 
One (Tree a) 

Instances

Instances details
MemoryCell m a => MemoryCell m (Digit a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

prettyCell :: Digit a -> m Memory Source #

Show a => Show (Digit a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

showsPrec :: Int -> Digit a -> ShowS #

show :: Digit a -> String #

showList :: [Digit a] -> ShowS #

Eq a => Eq (Digit a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

(==) :: Digit a -> Digit a -> Bool #

(/=) :: Digit a -> Digit a -> Bool #

Ord a => Ord (Digit a) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

compare :: Digit a -> Digit a -> Ordering #

(<) :: Digit a -> Digit a -> Bool #

(<=) :: Digit a -> Digit a -> Bool #

(>) :: Digit a -> Digit a -> Bool #

(>=) :: Digit a -> Digit a -> Bool #

max :: Digit a -> Digit a -> Digit a #

min :: Digit a -> Digit a -> Digit a #

type Schedule (m :: Type -> Type) a = [Stream m (Digit a)] Source #

data Scheduled a (m :: Type -> Type) Source #

Constructors

Scheduled (Stream m (Digit a)) (Schedule m a) 

Instances

Instances details
BoundedHeap Scheduled Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

hcost :: Size -> HeapOp a -> Credit Source #

Heap Scheduled Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

empty :: MonadCredit m => m (Scheduled a m) Source #

insert :: (MonadCredit m, Ord a) => a -> Scheduled a m -> m (Scheduled a m) Source #

merge :: (MonadCredit m, Ord a) => Scheduled a m -> Scheduled a m -> m (Scheduled a m) Source #

splitMin :: (MonadCredit m, Ord a) => Scheduled a m -> m (Maybe (a, Scheduled a m)) Source #

(MonadMemory m, MemoryCell m a) => MemoryCell m (Scheduled a m) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

Methods

prettyCell :: Scheduled a m -> m Memory Source #

Pretty a => MemoryStructure (Scheduled (PrettyCell a)) Source # 
Instance details

Defined in Test.Credit.Heap.Scheduled

link :: Ord a => Tree a -> Tree a -> Tree a Source #

insTree :: (MonadCredit m, Ord a) => Tree a -> Stream m (Digit a) -> m (Stream m (Digit a)) Source #

mrg :: (MonadCredit m, Ord a) => Stream m (Digit a) -> Stream m (Digit a) -> m (Stream m (Digit a)) Source #

normalize :: (MonadCredit m, Ord a) => Stream m (Digit a) -> m (Stream m (Digit a)) Source #

exec :: MonadCredit m => Schedule m a -> m (Schedule m a) Source #

removeMinTree :: (MonadCredit m, Ord a) => Stream m (Digit a) -> m (Tree a, Stream m (Digit a)) Source #

revOneStream :: MonadCredit m => [Tree a] -> Stream m (Digit a) -> m (Stream m (Digit a)) Source #