TernaryTrees- Efficient pure ternary tree Sets and Maps




data Elem a Source

Elem a is used to hold elements of a list after insertion, and indicate that we've reached the end of the list.


C !a 


Eq a => Eq (Elem a) 
Ord a => Ord (Elem a)

All elements are greater than the Null Elem, otherwise they are ordered according to their own ord instance (for the `compare (C x) (C y)` case).

Show a => Show (Elem a) 
Binary a => Binary (Elem a) 

data TernarySet a Source

TernarySet a is ternary tree. It is commonly used for storing word lists like dictionaries.


TNode !(Elem a) !(TernarySet a) !(TernarySet a) !(TernarySet a) 


Eq a => Eq (TernarySet a) 
Show a => Show (TernarySet a) 
Binary a => Binary (TernarySet a)

This binary uses the fact that the number of TEnds can be represented in binary numbers to save a lot of space.

insert' :: Ord a => [a] -> TernarySet aSource

Quickly build a tree without an initial tree. This should be used to create an initial tree, using insert there after.

insert :: Ord a => [a] -> TernarySet a -> TernarySet aSource

Inserts an entries into a tree.

isElem :: Ord a => [a] -> TernarySet a -> BoolSource

Returns true if the `[a]` is in the TernarySet

treeSize :: TernarySet a -> IntSource

Returns the number of non-Null Elems

numEntries :: TernarySet a -> IntSource

Counts how many entries there are in the tree.

fromList :: Ord a => [[a]] -> TernarySet aSource

Creates a new tree from a list of strings