seqn-0.1.1.0: Sequences and measured sequences
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Seqn.Internal.MTree

Description

This is an internal module. You probably don't need to import this. Use Data.Seqn.MSeq instead.

WARNING

Definitions in this module allow violating invariants that would otherwise be guaranteed by Data.Seqn.MSeq. Use at your own risk!

Synopsis

Measured

class Semigroup (Measure a) => Measured a where Source #

Types that have a combinable property, called the measure.

Associated Types

type Measure a Source #

Methods

measure :: a -> Measure a Source #

Calculate the measure of a value.

Instances

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

Defined in Data.Seqn.Internal.PQueue

Associated Types

type Measure (Elem a) Source #

Methods

measure :: Elem a -> Measure (Elem a) Source #

MTree

data MTree a Source #

Constructors

MBin !Int !(Measure a) !a !(MTree a) !(MTree a) 
MTip 

Instances

Instances details
(NFData (Measure a), NFData a) => NFData (MTree a) Source # 
Instance details

Defined in Data.Seqn.Internal.MTree

Methods

rnf :: MTree a -> () #

Basic

(<>>) :: Measured a => MTree a -> Measure a -> Measure a infixr 6 Source #

(<<>) :: Measured a => Measure a -> MTree a -> Measure a infixr 6 Source #

bin :: Measured a => a -> MTree a -> MTree a -> MTree a Source #

binn :: Measured a => Int -> a -> MTree a -> MTree a -> MTree a Source #

Folds

foldMap :: forall a m. Monoid m => (a -> m) -> MTree a -> m Source #

foldl' :: (b -> a -> b) -> b -> MTree a -> b Source #

foldr' :: (a -> b -> b) -> b -> MTree a -> b Source #

ifoldl' :: (Int -> b -> a -> b) -> b -> Int -> MTree a -> b Source #

ifoldr' :: (Int -> a -> b -> b) -> b -> Int -> MTree a -> b Source #

traverse :: (Measured b, Applicative f) => (a -> f b) -> MTree a -> f (MTree b) Source #

ifoldMap :: Monoid m => (Int -> a -> m) -> Int -> MTree a -> m Source #

itraverse :: (Measured b, Applicative f) => (Int -> a -> f b) -> Int -> MTree a -> f (MTree b) Source #

Construct

generateA :: (Measured a, Applicative f) => (Int -> f a) -> Int -> Int -> f (MTree a) Source #

Index

index :: Int -> MTree a -> a Source #

adjustF :: (Measured a, Functor f) => (a -> f a) -> Int -> MTree a -> f (MTree a) Source #

insertAt :: Measured a => Int -> a -> MTree a -> MTree a Source #

deleteAt :: Measured a => Int -> MTree a -> MTree a Source #

Slice

cons :: Measured a => a -> MTree a -> MTree a Source #

snoc :: Measured a => MTree a -> a -> MTree a Source #

uncons :: Measured a => MTree a -> SMaybe (S2 a (MTree a)) Source #

unconsSure :: Measured a => a -> MTree a -> MTree a -> S2 a (MTree a) Source #

unsnoc :: Measured a => MTree a -> SMaybe (S2 (MTree a) a) Source #

unsnocSure :: Measured a => a -> MTree a -> MTree a -> S2 (MTree a) a Source #

splitAtF :: (Measured a, Biapplicative f) => Int -> MTree a -> f (MTree a) (S2 a (MTree a)) Source #

Transform

mapMaybeA :: (Applicative f, Measured b) => (a -> f (Maybe b)) -> MTree a -> f (MTree b) Source #

mapEitherA :: (Applicative f, Measured b, Measured c) => (a -> f (Either b c)) -> MTree a -> f (S2 (MTree b) (MTree c)) Source #

Force

liftRnf2 :: (Measure a -> ()) -> (a -> ()) -> MTree a -> () Source #

Zip and unzip

zipWithStreamM :: (Measured c, Monad m) => (a -> b -> m c) -> MTree a -> Stream b -> m (MTree c) Source #

unzipWithA :: (Measured b, Measured c, Applicative f) => (a -> f (b, c)) -> MTree a -> f (S2 (MTree b) (MTree c)) Source #

unzipWith3A :: (Measured b, Measured c, Measured d, Applicative f) => (a -> f (b, c, d)) -> MTree a -> f (S3 (MTree b) (MTree c) (MTree d)) Source #

Tree helpers

fold :: b -> (Int -> a -> b -> b -> b) -> (Int -> a -> b -> b) -> (Int -> a -> b -> b) -> (a -> b) -> MTree a -> b Source #

foldSimple :: b -> (Int -> a -> b -> b -> b) -> MTree a -> b Source #

link :: Measured a => a -> MTree a -> MTree a -> MTree a Source #

merge :: Measured a => MTree a -> MTree a -> MTree a Source #

glue :: Measured a => MTree a -> MTree a -> MTree a Source #

balanceL :: Measured a => a -> MTree a -> MTree a -> MTree a Source #

balanceR :: Measured a => a -> MTree a -> MTree a -> MTree a Source #

Testing

valid :: (Measured a, Eq (Measure a)) => MTree a -> Bool Source #