radix-tree-0.1: Radix tree data structive over short byte-strings
Copyright(c) Sergey Vinokurov 2018
LicenseBSD3-style (see LICENSE)
Maintainerserg.foo@gmail.com
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.RadixTree.Internal

Description

This is an internal module that exposes innards of the RadixTree data structure. This API may change in any new release, even in a patch release - depend on it at your own risk.

Synopsis

Documentation

data RadixTree a Source #

A tree data structure that efficiently indexes values by string keys.

This type can be more memory-efficient than Map because it combines common prefixes of all keys. Specific savings will vary depending on concrete data set.

Constructors

RadixNode !(Maybe a) !(IntMap (RadixTree a))

Either has 0 or 2 or more children, never 1.

RadixStr 

Fields

Instances

Instances details
Foldable RadixTree Source # 
Instance details

Defined in Data.RadixTree.Internal

Methods

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

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

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

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

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

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

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

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

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

toList :: RadixTree a -> [a] #

null :: RadixTree a -> Bool #

length :: RadixTree a -> Int #

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

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

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

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

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

Traversable RadixTree Source # 
Instance details

Defined in Data.RadixTree.Internal

Methods

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

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

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

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

Functor RadixTree Source # 
Instance details

Defined in Data.RadixTree.Internal

Methods

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

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

Generic (RadixTree a) Source # 
Instance details

Defined in Data.RadixTree.Internal

Associated Types

type Rep (RadixTree a) :: Type -> Type #

Methods

from :: RadixTree a -> Rep (RadixTree a) x #

to :: Rep (RadixTree a) x -> RadixTree a #

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

Defined in Data.RadixTree.Internal

NFData a => NFData (RadixTree a) Source # 
Instance details

Defined in Data.RadixTree.Internal

Methods

rnf :: RadixTree a -> () #

type Rep (RadixTree a) Source # 
Instance details

Defined in Data.RadixTree.Internal

empty :: RadixTree a Source #

Radix tree with no elements.

null :: RadixTree a -> Bool Source #

Check whether radix tree is empty

size :: RadixTree a -> Int Source #

O(n) Get number of elements in a radix tree.

insert :: forall a. ShortByteString -> a -> RadixTree a -> RadixTree a Source #

Add new element to a radix tree.

insertWith :: forall a. (a -> a -> a) -> ShortByteString -> a -> RadixTree a -> RadixTree a Source #

Add new element to a radix tree. If an element was already present for the given key, use supplied funciton f to produce a new value. The function will be called like this f newValue oldValue.

lookup :: forall a. ShortByteString -> RadixTree a -> Maybe a Source #

O(length(key)) Try to find a value associated with the given key.

fromList :: [(ShortByteString, a)] -> RadixTree a Source #

Construct a radix tree from list of key-value pairs. If some key appears twice in the input list, later occurrences will override earlier ones.

toList :: RadixTree a -> [(ShortByteString, a)] Source #

O(n) Convert a radix tree to a list of key-value pairs.

toAscList :: forall a. RadixTree a -> [(ShortByteString, a)] Source #

O(n) Convert a radix tree to an ascending list of key-value pairs.

keys :: RadixTree a -> [ShortByteString] Source #

O(n) Get all keys stored in a radix tree.

keysSet :: RadixTree a -> Set ShortByteString Source #

O(n) Get set of all keys stored in a radix tree.

elems :: RadixTree a -> [a] Source #

O(n) Get all values stored in a radix tree.

mapMaybe :: forall a b. (a -> Maybe b) -> RadixTree a -> RadixTree b Source #

O(n) Map a function that can remove some existing elements over a radix tree.

union :: RadixTree a -> RadixTree a -> RadixTree a Source #

O(n + m) Combine two radix trees trees. If a key is present in both trees then the value from left one will be retained.

unionWith :: forall a. (a -> a -> a) -> RadixTree a -> RadixTree a -> RadixTree a Source #

O(n + m) Combine two trees using supplied function to resolve values that have the same key in both trees.