text-trie-0.2.5.0: An efficient finite map from Text to values, based on bytestring-trie.

CopyrightCopyright (c) 2008--2015 wren gayle romano 2019 michael j. klein
LicenseBSD3
Maintainerlambdamichael@gmail.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

Data.Trie.Text.Internal

Contents

Description

Internal definition of the Trie data type and generic functions for manipulating them. Almost everything here is re-exported from Data.Trie, which is the preferred API for users. This module is for developers who need deeper (and potentially fragile) access to the abstract type.

Synopsis

Data types

data Trie a Source #

A map from ByteStrings to a. For all the generic functions, note that tries are strict in the Maybe but not in a.

The Monad instance is strange. If a key k1 is a prefix of other keys, then results from binding the value at k1 will override values from longer keys when they collide. If this is useful for anything, or if there's a more sensible instance, I'd be curious to know.

Instances
Monad Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

(>>=) :: Trie a -> (a -> Trie b) -> Trie b #

(>>) :: Trie a -> Trie b -> Trie b #

return :: a -> Trie a #

fail :: String -> Trie a #

Functor Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

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

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

Applicative Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

pure :: a -> Trie a #

(<*>) :: Trie (a -> b) -> Trie a -> Trie b #

liftA2 :: (a -> b -> c) -> Trie a -> Trie b -> Trie c #

(*>) :: Trie a -> Trie b -> Trie b #

(<*) :: Trie a -> Trie b -> Trie a #

Foldable Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

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

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

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

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

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

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

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

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

toList :: Trie a -> [a] #

null :: Trie a -> Bool #

length :: Trie a -> Int #

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

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

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

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

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

Traversable Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

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

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

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

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

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

Defined in Data.Trie.Text.Internal

Methods

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

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

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

Defined in Data.Trie.Text.Internal

Methods

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

show :: Trie a -> String #

showList :: [Trie a] -> ShowS #

Generic a => Generic (Trie a) Source # 
Instance details

Defined in Data.Trie.Text.Internal

Associated Types

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

Methods

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

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

Semigroup a => Semigroup (Trie a) Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

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

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

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

Monoid a => Monoid (Trie a) Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

mempty :: Trie a #

mappend :: Trie a -> Trie a -> Trie a #

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

Binary a => Binary (Trie a) Source # 
Instance details

Defined in Data.Trie.Text.Internal

Methods

put :: Trie a -> Put #

get :: Get (Trie a) #

putList :: [Trie a] -> Put #

Generic1 Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

Associated Types

type Rep1 Trie :: k -> Type #

Methods

from1 :: Trie a -> Rep1 Trie a #

to1 :: Rep1 Trie a -> Trie a #

type Rep (Trie a) Source # 
Instance details

Defined in Data.Trie.Text.Internal

type Rep (Trie a)
type Rep1 Trie Source # 
Instance details

Defined in Data.Trie.Text.Internal

type Rep1 Trie

showTrie :: Show a => Trie a -> String Source #

Visualization fuction for debugging.

Functions for Text

breakMaximalPrefix :: Text -> Text -> (Text, Text, Text) Source #

commonPrefixes unless Nothing, in which case (empty, x, y) is returned

Basic functions

empty :: Trie a Source #

O(1), Construct the empty trie.

null :: Trie a -> Bool Source #

O(1), Is the trie empty?

singleton :: Text -> a -> Trie a Source #

O(1), Construct a singleton trie.

size :: Trie a -> Int Source #

O(n), Get count of elements in trie.

Conversion and folding functions

foldrWithKey :: (Text -> a -> b -> b) -> b -> Trie a -> b Source #

Convert a trie into a list (in key-sorted order) using a function, folding the list as we go.

toListBy :: (Text -> a -> b) -> Trie a -> [b] Source #

Convert a trie into a list using a function. Resulting values are in key-sorted order.

Query functions

lookupBy_ :: (Maybe a -> Trie a -> b) -> b -> (Trie a -> b) -> Text -> Trie a -> b Source #

Generic function to find a value (if it exists) and the subtrie rooted at the prefix. The first function argument is called if and only if a node is exactly reachable by the query; if no node is exactly reachable the default value is used; if the middle of an arc is reached, the second function argument is used.

This function is intended for internal use. For the public-facing version, see lookupBy in Data.Trie.

submap :: Text -> Trie a -> Trie a Source #

Return the subtrie containing all keys beginning with a prefix.

match_ :: Trie a -> Text -> Maybe (Int, a) Source #

Given a query, find the longest prefix with an associated value in the trie, returning the length of that prefix and the associated value.

This function may not have the most useful return type. For a version that returns the prefix itself as well as the remaining string, see match in Data.Trie.

matches_ :: Trie a -> Text -> [(Int, a)] Source #

Given a query, find all prefixes with associated values in the trie, returning their lengths and values. This function is a good producer for list fusion.

This function may not have the most useful return type. For a version that returns the prefix itself as well as the remaining string, see matches in Data.Trie.

Single-value modification

alterBy :: (Text -> a -> Maybe a -> Maybe a) -> Text -> a -> Trie a -> Trie a Source #

Generic function to alter a trie by one element with a function to resolve conflicts (or non-conflicts).

alterBy_ :: (Text -> a -> Maybe a -> Trie a -> (Maybe a, Trie a)) -> Text -> a -> Trie a -> Trie a Source #

A variant of alterBy which also allows modifying the sub-trie.

adjustBy :: (Text -> a -> a -> a) -> Text -> a -> Trie a -> Trie a Source #

Alter the value associated with a given key. If the key is not present, then the trie is returned unaltered. See alterBy if you are interested in inserting new keys or deleting old keys. Because this function does not need to worry about changing the trie structure, it is somewhat faster than alterBy.

Combining tries

mergeBy :: (a -> a -> Maybe a) -> Trie a -> Trie a -> Trie a Source #

Combine two tries, using a function to resolve collisions. This can only define the space of functions between union and symmetric difference but, with those two, all set operations can be defined (albeit inefficiently).

Mapping functions

mapBy :: (Text -> a -> Maybe b) -> Trie a -> Trie b Source #

Generic version of fmap. This function is notably more expensive than fmap or filterMap because we have to reconstruct the keys.

filterMap :: (a -> Maybe b) -> Trie a -> Trie b Source #

Apply a function to all values, potentially removing them.

contextualMap :: (a -> Trie a -> b) -> Trie a -> Trie b Source #

A variant of fmap which provides access to the subtrie rooted at each value.

contextualMap' :: (a -> Trie a -> b) -> Trie a -> Trie b Source #

A variant of contextualMap which applies the function strictly.

contextualFilterMap :: (a -> Trie a -> Maybe b) -> Trie a -> Trie b Source #

A contextual variant of filterMap.

contextualMapBy :: (Text -> a -> Trie a -> Maybe b) -> Trie a -> Trie b Source #

A contextual variant of mapBy. Again note that this is expensive since we must reconstruct the keys.

Priority-queue functions

updateMinViewBy :: (Text -> a -> Maybe a) -> Trie a -> Maybe (Text, a, Trie a) Source #

updateMaxViewBy :: (Text -> a -> Maybe a) -> Trie a -> Maybe (Text, a, Trie a) Source #