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

Test.Credit.Sortable.Scheduled

Synopsis

Documentation

rev :: MonadCredit m => [a] -> [a] -> m [a] Source #

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.Sortable.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

streamToList :: MonadCredit m => Stream m a -> m [a] Source #

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

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

Constructors

SMergeSort Size [(Stream m a, Schedule m a)] 

Instances

Instances details
BoundedSortable SMergeSort Source # 
Instance details

Defined in Test.Credit.Sortable.Scheduled

Methods

scost :: Size -> SortableOp a -> Credit Source #

Sortable SMergeSort Source # 
Instance details

Defined in Test.Credit.Sortable.Scheduled

Methods

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

add :: (MonadCredit m, Ord a) => a -> SMergeSort a m -> m (SMergeSort a m) Source #

sort :: (MonadCredit m, Ord a) => SMergeSort a m -> m [a] Source #

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

Defined in Test.Credit.Sortable.Scheduled

Methods

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

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

Defined in Test.Credit.Sortable.Scheduled

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

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

exec2 :: MonadCredit m => (Stream m a, Schedule m a) -> m (Stream m a, Schedule m a) Source #

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

addSeg :: (MonadCredit m, Ord a) => Stream m a -> [(Stream m a, Schedule m a)] -> Size -> Schedule m a -> m [(Stream m a, Schedule m a)] Source #

mrgAll :: (MonadCredit m, Ord a) => Stream m a -> [(Stream m a, Schedule m a)] -> m (Stream m a) Source #