Portability | portable |
---|---|
Stability | beta |
Maintainer | wren@community.haskell.org |
Data.Trie.Internal
Contents
Description
- data Trie a
- type KeyString = ByteString
- type KeyElem = ByteStringElem
- showTrie :: Show a => Trie a -> String
- empty :: Trie a
- null :: Trie a -> Bool
- singleton :: KeyString -> a -> Trie a
- size :: Trie a -> Int
- toListBy :: (KeyString -> a -> b) -> Trie a -> [b]
- lookupBy_ :: (Maybe a -> Trie a -> b) -> b -> (Trie a -> b) -> KeyString -> Trie a -> b
- submap :: KeyString -> Trie a -> Trie a
- alterBy :: (KeyString -> a -> Maybe a -> Maybe a) -> KeyString -> a -> Trie a -> Trie a
- mergeBy :: (a -> a -> Maybe a) -> Trie a -> Trie a -> Trie a
- mapBy :: (KeyString -> a -> Maybe b) -> Trie a -> Trie b
- filterMap :: (a -> Maybe b) -> Trie a -> Trie b
Data types
A map from ByteString
s 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.
type KeyString = ByteStringSource
Basic functions
Conversion functions
toListBy :: (KeyString -> a -> b) -> Trie a -> [b]Source
Convert a trie into a list using a function. Resulting values are in sorted order according to the keys.
Query functions
lookupBy_ :: (Maybe a -> Trie a -> b) -> b -> (Trie a -> b) -> KeyString -> Trie a -> bSource
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 :: KeyString -> Trie a -> Trie aSource
Return the subtrie containing all keys beginning with a prefix.
Single-value modification
alterBy :: (KeyString -> a -> Maybe a -> Maybe a) -> KeyString -> a -> Trie a -> Trie aSource
Generic function to alter a trie by one element with a function to resolve conflicts (or non-conflicts).
Combining tries
mergeBy :: (a -> a -> Maybe a) -> Trie a -> Trie a -> Trie aSource
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).