O(min(n,L)) Updates a value at a given key (if that key is in the trie) or deletes the
element if the result of the updating function is Nothing. If the key is not found, the trie
is returned unchanged.

O(min(n,L)) Updates a value at a given key (if that key is in the trie) or deletes the
element if the result of the updating function is Nothing. If the key is not found, the trie
is returned unchanged.

O(min(n,m)) Difference with a combining function, including the key. If two equal keys are
encountered, the combining function is applied to the key and both values. If it returns
Nothing, the element is discarded, if it returns Just a value, the element is updated
with the new value.

returns all key-value pairs in breadth first order (short words first)
this enables prefix search with upper bounds on the size of the result set
e.g. search ... >>> toListBF >>> take 1000 will give the 1000 shortest words
found in the result set and will ignore all long words

toList is derived from the following code found in the net when searching haskell breadth first search

Singletons are counted as 0, all other n-ary constructors
are counted as n+1 (1 for the constructor and 1 for every field)
cons nodes of char lists are counted 2, 1 for the cons, 1 for the char
for values only the ref to the value is counted, not the space for the value itself
key chars are assumed to be unboxed