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

Test.Credit.Finger

Documentation

data Digit a Source #

Constructors

One a 
Two a a 
Three a a a 

Instances

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

Defined in Test.Credit.Finger

Methods

prettyCell :: Digit a -> m Memory Source #

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

Defined in Test.Credit.Finger

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

Methods

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

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

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

Defined in Test.Credit.Finger

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 #

Measured a v => Measured (Digit a) v Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Digit a -> v Source #

data Tuple v a Source #

Constructors

Pair v a a 
Triple v a a a 

Instances

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

Defined in Test.Credit.Finger

Methods

prettyCell :: Tuple v a -> m Memory Source #

(Show v, Show a) => Show (Tuple v a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

showsPrec :: Int -> Tuple v a -> ShowS #

show :: Tuple v a -> String #

showList :: [Tuple v a] -> ShowS #

(Eq v, Eq a) => Eq (Tuple v a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

(==) :: Tuple v a -> Tuple v a -> Bool #

(/=) :: Tuple v a -> Tuple v a -> Bool #

(Ord v, Ord a) => Ord (Tuple v a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

compare :: Tuple v a -> Tuple v a -> Ordering #

(<) :: Tuple v a -> Tuple v a -> Bool #

(<=) :: Tuple v a -> Tuple v a -> Bool #

(>) :: Tuple v a -> Tuple v a -> Bool #

(>=) :: Tuple v a -> Tuple v a -> Bool #

max :: Tuple v a -> Tuple v a -> Tuple v a #

min :: Tuple v a -> Tuple v a -> Tuple v a #

Monoid v => Measured (Tuple v a) v Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Tuple v a -> v Source #

data FingerTree v a (m :: Type -> Type) Source #

Constructors

Empty 
Single a 
Deep (Thunk m (Lazy m) v) (Digit a) (Thunk m (FLazyCon m) (FingerTree v (Tuple v a) m)) (Digit a) 

Instances

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

Defined in Test.Credit.Finger

Methods

prettyCell :: FingerTree v a m -> m Memory Source #

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

Defined in Test.Credit.Finger

data FLazyCon (m :: Type -> Type) a where Source #

Constructors

FPure :: forall a (m :: Type -> Type). a -> FLazyCon m a 
FCons :: forall a1 v (m :: Type -> Type). Measured a1 v => a1 -> Thunk m (FLazyCon m) (FingerTree v a1 m) -> FLazyCon m (FingerTree v a1 m) 
FSnoc :: forall a1 v (m :: Type -> Type). Measured a1 v => Thunk m (FLazyCon m) (FingerTree v a1 m) -> a1 -> FLazyCon m (FingerTree v a1 m) 
FTail :: forall a1 v (m :: Type -> Type). Measured a1 v => FingerTree v a1 m -> FLazyCon m (FingerTree v a1 m) 
FInit :: forall a1 v (m :: Type -> Type). Measured a1 v => FingerTree v a1 m -> FLazyCon m (FingerTree v a1 m) 

Instances

Instances details
MonadCredit m => HasStep (FLazyCon m :: Type -> Type) (m :: Type -> Type) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

step :: FLazyCon m a -> m a Source #

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

Defined in Test.Credit.Finger

Methods

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

class Monoid v => Measured a v where Source #

Methods

measure :: a -> v Source #

Instances

Instances details
Measured a v => Measured (Digit a) v Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Digit a -> v Source #

Measured (Elem a) Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Size Source #

Measured (Elem a) () Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> () Source #

Measured a v => Measured [a] v Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: [a] -> v Source #

Measured (Elem a) (Key a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Key a Source #

Ord a => Measured (Elem a) (Prio a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Prio a Source #

Monoid v => Measured (Tuple v a) v Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Tuple v a -> v Source #

measurement :: (MonadCredit m, Measured a v) => FingerTree v a m -> m v Source #

forceAll :: (MonadCredit m, Measured a v) => FingerTree v a m -> m () Source #

empty :: MonadCredit m => m (Thunk m (FLazyCon m) (FingerTree v a m)) Source #

pair :: Measured a v => a -> a -> Tuple v a Source #

triple :: Measured a v => a -> a -> a -> Tuple v a Source #

deep :: (MonadCredit m, Measured a v) => Thunk m (Lazy m) v -> Digit a -> Thunk m (FLazyCon m) (FingerTree v (Tuple v a) m) -> Digit a -> m (FingerTree v a m) Source #

deep' :: (MonadCredit m, Measured a v) => Digit a -> m (Thunk m (FLazyCon m) (FingerTree v (Tuple v a) m)) -> Digit a -> m (FingerTree v a m) Source #

isEmpty :: forall v a (m :: Type -> Type). FingerTree v a m -> Bool Source #

toList :: Digit a -> [a] Source #

toTree :: (MonadCredit m, Measured a v) => [a] -> m (FingerTree v a m) Source #

toDigit :: Tuple v a -> Digit a Source #

cons :: (MonadCredit m, Measured a v) => a -> FingerTree v a m -> m (FingerTree v a m) Source #

cons' :: (MonadCredit m, Measured a v) => a -> FingerTree v a m -> m (FingerTree v a m) Source #

head :: MonadCredit m => FingerTree v a m -> m a Source #

tail :: (MonadCredit m, Measured a v) => FingerTree v a m -> m (FingerTree v a m) Source #

deep0 :: (MonadCredit m, Measured a v) => FingerTree v (Tuple v a) m -> Digit a -> m (FingerTree v a m) Source #

map1 :: (MonadCredit m, Measured a v) => (a -> a) -> FingerTree v a m -> m (FingerTree v a m) Source #

uncons :: (MonadCredit m, Measured a v) => FingerTree v a m -> m (Maybe (a, FingerTree v a m)) Source #

deepL :: (MonadCredit m, Measured a v) => [a] -> Thunk m (Lazy m) v -> Thunk m (FLazyCon m) (FingerTree v (Tuple v a) m) -> Digit a -> m (FingerTree v a m) Source #

last :: (MonadCredit m, Measured a v) => FingerTree v a m -> m a Source #

snoc :: (MonadCredit m, Measured a v) => FingerTree v a m -> a -> m (FingerTree v a m) Source #

snoc' :: (MonadCredit m, Measured a v) => FingerTree v a m -> a -> m (FingerTree v a m) Source #

init :: (MonadCredit m, Measured a v) => FingerTree v a m -> m (FingerTree v a m) Source #

deepN :: (MonadCredit m, Measured a v) => Digit a -> FingerTree v (Tuple v a) m -> m (FingerTree v a m) Source #

mapN :: (MonadCredit m, Measured a v) => (a -> a) -> FingerTree v a m -> m (FingerTree v a m) Source #

unsnoc :: (MonadCredit m, Measured a v) => FingerTree v a m -> m (Maybe (FingerTree v a m, a)) Source #

deepR :: (MonadCredit m, Measured a v) => Digit a -> Thunk m (Lazy m) v -> Thunk m (FLazyCon m) (FingerTree v (Tuple v a) m) -> [a] -> m (FingerTree v a m) Source #

toTuples :: Measured a v => [a] -> [Tuple v a] Source #

glue :: (MonadCredit m, Measured a v) => FingerTree v a m -> [a] -> FingerTree v a m -> m (FingerTree v a m) Source #

concat' :: (MonadCredit m, Measured a v) => FingerTree v a m -> FingerTree v a m -> m (FingerTree v a m) Source #

data Split v a (m :: Type -> Type) Source #

Constructors

Split 

Fields

splitDigit :: Measured a v => (v -> Bool) -> v -> Digit a -> ([a], a, [a]) Source #

splitTree :: (MonadCredit m, Measured a v) => (v -> Bool) -> v -> FingerTree v a m -> m (Split v a m) Source #

split :: (MonadCredit m, Measured a v) => (v -> Bool) -> FingerTree v a m -> m (FingerTree v a m, FingerTree v a m) Source #

takeUntil :: (MonadCredit m, Measured a v) => (v -> Bool) -> FingerTree v a m -> m (FingerTree v a m) Source #

dropUntil :: (MonadCredit m, Measured a v) => (v -> Bool) -> FingerTree v a m -> m (FingerTree v a m) Source #

lookupTree :: (MonadCredit m, Measured a v) => (v -> Bool) -> v -> FingerTree v a m -> m (Maybe (v, a)) Source #

newtype Elem a Source #

Constructors

Elem a 

Instances

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

Defined in Test.Credit.Finger

Methods

prettyCell :: Elem a -> m Memory Source #

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

Defined in Test.Credit.Finger

Methods

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

show :: Elem a -> String #

showList :: [Elem a] -> ShowS #

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

Defined in Test.Credit.Finger

Methods

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

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

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

Defined in Test.Credit.Finger

Methods

compare :: Elem a -> Elem a -> Ordering #

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

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

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

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

max :: Elem a -> Elem a -> Elem a #

min :: Elem a -> Elem a -> Elem a #

Measured (Elem a) Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Size Source #

Measured (Elem a) () Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> () Source #

Measured (Elem a) (Key a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Key a Source #

Ord a => Measured (Elem a) (Prio a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Prio a Source #

newtype FingerDeque a (m :: Type -> Type) Source #

Constructors

FingerDeque (FingerTree () (Elem a) m) 

Instances

Instances details
BoundedDeque FingerDeque Source # 
Instance details

Defined in Test.Credit.Finger

Methods

qcost :: Size -> DequeOp a -> Credit Source #

Deque FingerDeque Source # 
Instance details

Defined in Test.Credit.Finger

Methods

empty :: MonadInherit m => m (FingerDeque a m) Source #

cons :: MonadInherit m => a -> FingerDeque a m -> m (FingerDeque a m) Source #

snoc :: MonadInherit m => FingerDeque a m -> a -> m (FingerDeque a m) Source #

uncons :: MonadInherit m => FingerDeque a m -> m (Maybe (a, FingerDeque a m)) Source #

unsnoc :: MonadInherit m => FingerDeque a m -> m (Maybe (FingerDeque a m, a)) Source #

concat :: MonadInherit m => FingerDeque a m -> FingerDeque a m -> m (FingerDeque a m) Source #

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

Defined in Test.Credit.Finger

Methods

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

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

Defined in Test.Credit.Finger

newtype Size Source #

Constructors

Size Int 

Instances

Instances details
Monoid Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

mempty :: Size #

mappend :: Size -> Size -> Size #

mconcat :: [Size] -> Size #

Semigroup Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

(<>) :: Size -> Size -> Size #

sconcat :: NonEmpty Size -> Size #

stimes :: Integral b => b -> Size -> Size #

Num Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

(+) :: Size -> Size -> Size #

(-) :: Size -> Size -> Size #

(*) :: Size -> Size -> Size #

negate :: Size -> Size #

abs :: Size -> Size #

signum :: Size -> Size #

fromInteger :: Integer -> Size #

Show Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

showsPrec :: Int -> Size -> ShowS #

show :: Size -> String #

showList :: [Size] -> ShowS #

Eq Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

(==) :: Size -> Size -> Bool #

(/=) :: Size -> Size -> Bool #

Ord Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

compare :: Size -> Size -> Ordering #

(<) :: Size -> Size -> Bool #

(<=) :: Size -> Size -> Bool #

(>) :: Size -> Size -> Bool #

(>=) :: Size -> Size -> Bool #

max :: Size -> Size -> Size #

min :: Size -> Size -> Size #

Measured (Elem a) Size Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Size Source #

newtype FingerRA a (m :: Type -> Type) Source #

Constructors

FingerRA (FingerTree Size (Elem a) m) 

Instances

Instances details
BoundedRandomAccess FingerRA Source # 
Instance details

Defined in Test.Credit.Finger

RandomAccess FingerRA Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

cons :: MonadCredit m => a -> FingerRA a m -> m (FingerRA a m) Source #

uncons :: MonadCredit m => FingerRA a m -> m (Maybe (a, FingerRA a m)) Source #

lookup :: MonadCredit m => Int -> FingerRA a m -> m (Maybe a) Source #

update :: MonadCredit m => Int -> a -> FingerRA a m -> m (FingerRA a m) Source #

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

Defined in Test.Credit.Finger

Methods

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

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

Defined in Test.Credit.Finger

splitAt :: MonadCredit m => Int -> FingerRA a m -> m (FingerRA a m, FingerRA a m) Source #

data Prio a Source #

Constructors

MInfty 
Prio a 

Instances

Instances details
Ord a => Monoid (Prio a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

mempty :: Prio a #

mappend :: Prio a -> Prio a -> Prio a #

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

Ord a => Semigroup (Prio a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

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

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

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

Defined in Test.Credit.Finger

Methods

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

show :: Prio a -> String #

showList :: [Prio a] -> ShowS #

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

Defined in Test.Credit.Finger

Methods

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

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

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

Defined in Test.Credit.Finger

Methods

compare :: Prio a -> Prio a -> Ordering #

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

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

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

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

max :: Prio a -> Prio a -> Prio a #

min :: Prio a -> Prio a -> Prio a #

Ord a => Measured (Elem a) (Prio a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Prio a Source #

newtype FingerHeap a (m :: Type -> Type) Source #

Constructors

FingerHeap (FingerTree (Prio a) (Elem a) m) 

Instances

Instances details
BoundedHeap FingerHeap Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

Heap FingerHeap Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

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

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

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

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

Defined in Test.Credit.Finger

Methods

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

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

Defined in Test.Credit.Finger

data Key a Source #

Constructors

NoKey 
Key a 

Instances

Instances details
Monoid (Key a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

mempty :: Key a #

mappend :: Key a -> Key a -> Key a #

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

Semigroup (Key a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

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

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

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

Defined in Test.Credit.Finger

Methods

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

show :: Key a -> String #

showList :: [Key a] -> ShowS #

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

Defined in Test.Credit.Finger

Methods

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

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

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

Defined in Test.Credit.Finger

Methods

compare :: Key a -> Key a -> Ordering #

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

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

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

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

max :: Key a -> Key a -> Key a #

min :: Key a -> Key a -> Key a #

Measured (Elem a) (Key a) Source # 
Instance details

Defined in Test.Credit.Finger

Methods

measure :: Elem a -> Key a Source #

newtype FingerSort a (m :: Type -> Type) Source #

Constructors

FingerSort (FingerTree (Key a) (Elem a) m) 

Instances

Instances details
BoundedSortable FingerSort Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

Sortable FingerSort Source # 
Instance details

Defined in Test.Credit.Finger

Methods

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

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

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

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

Defined in Test.Credit.Finger

Methods

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

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

Defined in Test.Credit.Finger

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

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

treeToList :: MonadCredit m => [b] -> (a -> m [b]) -> FingerTree v a m -> m [b] Source #