{- |
This module exposes internal representation of @TSet@.
TSet has one invariant condition:

* Subtrees of an @TSet@ should not be empty.

For example, consider following tree structure which is valid:

  > > fromList ["a", "aa", "bc"]
  > Root -> False
  >   'a' -> True
  >     'a' -> True
  >   'b' -> False
  >     'c' -> True

Adding redundant node which represents empty set does not change
what an @TSet@ represents.

  > Root -> False
  >   'a' -> True
  >     'a' -> True
  >   'b' -> False
  >     'c' -> True
  >   'd' -> False
  >     'e' -> False
  >       'f' -> False

But such @TSet@ should not exist because it confuses @Eq@ and @Ord@ instances and @null@ function.
-}
module Data.Trie.Set.Internal(
  TSet(..),
  Node(..),
  foldTSet, paraTSet
)
where

import Data.Trie.Set.Hidden