A Less Trivial Trie in Ada This is a basic improvement on the trivial trie I've already written, although it required the total restructuring of the body. The primary nicety this has over the original is reclamation of storage. I so wanted to add more features to this library, but have instead made the bare minimum improvement to leave all others for later, as all others are rather invisible improvements. In particular, trie nodes can be sparse or dense, and the occupation threshold for this change trivially-determined, but I can't be bothered right now; a sparse representation also makes programming easier, as a canonical and simple representation for any empty nodes is nicer to check than all of the dense storage links. This trie library uses a protected object to make it trivially safe for usage within multiple tasks. That subprogram Sift has been removed, as it made the design all too complicated, and I never needed it for any reason regardless. I wanted to have a model allowing partial exclusivity, so that sifted nodes in different branches could be accessed independently, but to ensure this wouldn't deadlock in any way would be hard enough, if Ada made it more convenient to have partial exclusivity at all, but it felt like a lot of work for very little gain, especially compared to common usages ignoring such. I wonder what are the performance implications of using controlled types for every node in the trie. This isn't an ultimate Ada trie library by any means, but it's certainly less trivial than my first. .