Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
This module implements an interface for working with "tries". A key in the trie represents a distinct path through the trie. This can provide benefits when using very large and possibly very similar keys where comparing for order can become expensive, and storing the various keys could be inefficient.
For primitive types like Int
, this library will select efficient
implementations automatically.
All methods of TrieKey
can be derived automatically using
a Generic
instance.
data Demo = DemoC1Int
| DemoC2Int
Char
derivingGeneric
instanceTrieKey
Demo
- newtype Trie k a = MkTrie (TrieRep k a)
- alter :: TrieKey k => k -> (Maybe a -> Maybe a) -> Trie k a -> Trie k a
- member :: TrieKey k => k -> Trie k a -> Bool
- notMember :: TrieKey k => k -> Trie k a -> Bool
- fromList :: TrieKey k => [(k, v)] -> Trie k v
- class TrieKey k where
- type TrieRep k a
- empty :: Trie k a
- trieNull :: Trie k a -> Bool
- lookup :: k -> Trie k a -> Maybe a
- insert :: k -> a -> Trie k a -> Trie k a
- delete :: k -> Trie k a -> Trie k a
- singleton :: k -> a -> Trie k a
- trieMap :: (a -> b) -> Trie k a -> Trie k b
- trieFold :: (a -> b -> b) -> Trie k a -> b -> b
- trieTraverse :: Applicative f => (a -> f b) -> Trie k a -> f (Trie k b)
- trieShowsPrec :: Show a => Int -> Trie k a -> ShowS
- type TrieRepDefault k a = Maybe (GTrie (Rep k) a)
- class GTrieKey f where
- gtrieLookup :: f p -> GTrie f a -> Maybe a
- gtrieInsert :: f p -> a -> GTrie f a -> GTrie f a
- gtrieSingleton :: f p -> a -> GTrie f a
- gtrieDelete :: f p -> GTrie f a -> Maybe (GTrie f a)
- gtrieMap :: (a -> b) -> GTrie f a -> GTrie f b
- gtrieFold :: (a -> b -> b) -> GTrie f a -> b -> b
- gtrieTraverse :: Applicative m => (a -> m b) -> GTrie f a -> m (GTrie f b)
- data family GTrie f a
Trie interface
Effectively an associated datatype of tries indexable by keys of type k
.
By using a separate newtype wrapper around the associated type synonym we're
able to use the same MkTrie
constructor for all of the generic
implementations while still getting the injectivity of a new type.
alter :: TrieKey k => k -> (Maybe a -> Maybe a) -> Trie k a -> Trie k a Source
Alter the values of a trie. The function will take the value stored as the given key if one exists and should return a value to insert at that location or Nothing to delete from that location.
Keys that support prefix-trie map operations.
All operations can be automatically derived from a Generic
instance.
Nothing
Construct an empty trie
trieNull :: Trie k a -> Bool Source
Test for an empty trie
lookup :: k -> Trie k a -> Maybe a Source
Lookup element from trie
insert :: k -> a -> Trie k a -> Trie k a Source
Insert element into trie
delete :: k -> Trie k a -> Trie k a Source
Delete element from trie
singleton :: k -> a -> Trie k a Source
Construct a trie holding a single value
trieMap :: (a -> b) -> Trie k a -> Trie k b Source
Apply a function to all values stored in a trie
trieFold :: (a -> b -> b) -> Trie k a -> b -> b Source
Fold all the values store in a trie
trieTraverse :: Applicative f => (a -> f b) -> Trie k a -> f (Trie k b) Source
Traverse the values stored in a trie
trieShowsPrec :: Show a => Int -> Trie k a -> ShowS Source
Show the representation of a trie
TrieKey Bool | |
TrieKey Char | 'Char tries are implemented with |
TrieKey Int | |
TrieKey Integer | |
TrieKey () | |
TrieKey k => TrieKey [k] | |
TrieKey k => TrieKey (Maybe k) | |
(TrieKey a, TrieKey b) => TrieKey (Either a b) | |
(TrieKey a, TrieKey b) => TrieKey (a, b) | |
(TrieKey a, TrieKey b, TrieKey c) => TrieKey (a, b, c) |
Generic derivation implementation
type TrieRepDefault k a = Maybe (GTrie (Rep k) a) Source
TrieKey operations on Generic representations used to provide the default implementations of tries.
gtrieLookup :: f p -> GTrie f a -> Maybe a Source
gtrieInsert :: f p -> a -> GTrie f a -> GTrie f a Source
gtrieSingleton :: f p -> a -> GTrie f a Source
gtrieDelete :: f p -> GTrie f a -> Maybe (GTrie f a) Source
gtrieMap :: (a -> b) -> GTrie f a -> GTrie f b Source
gtrieFold :: (a -> b -> b) -> GTrie f a -> b -> b Source
gtrieTraverse :: Applicative m => (a -> m b) -> GTrie f a -> m (GTrie f b) Source
GTrieKey V1 | Tries of types without constructors are represented by a unit. |
GTrieKey U1 | Tries of constructors without fields are represented by a single value. |
TrieKey k => GTrieKey (K1 i k) | Generic fields are represented by tries of the field type. |
(GTrieKey f, GTrieKey g) => GTrieKey ((:+:) f g) | Generic sums are represented by up to a pair of sub-tries. |
(GTrieKey f, GTrieKey g) => GTrieKey ((:*:) f g) | Generic products are represented by tries of tries. |
GTrieKey f => GTrieKey (M1 i c f) | Generic metadata is skipped in trie representation and operations. |