diff --git a/pred-trie.cabal b/pred-trie.cabal
--- a/pred-trie.cabal
+++ b/pred-trie.cabal
@@ -1,5 +1,5 @@
 Name:                   pred-trie
-Version:                0.0.10.2
+Version:                0.0.11
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
diff --git a/src/Data/Trie/Pred/Unified.hs b/src/Data/Trie/Pred/Unified.hs
--- a/src/Data/Trie/Pred/Unified.hs
+++ b/src/Data/Trie/Pred/Unified.hs
@@ -1,5 +1,6 @@
 module Data.Trie.Pred.Unified
   ( RUPTrie (..)
+  , showTrie
   , merge
   , lookup
   , lookupNearestParent
@@ -12,11 +13,17 @@
 import Data.Trie.Pred.Unified.Tail hiding (lookup, lookupNearestParent, merge)
 import qualified Data.Trie.Pred.Unified.Tail as NU
 import Data.Monoid
+import Data.Maybe (fromMaybe)
 import qualified Data.List.NonEmpty as NE
 
 
 data RUPTrie t x = Rooted { root :: Maybe x
                           , children :: [UPTrie t x] }
+
+showTrie :: Show t => RUPTrie t x -> String
+showTrie (Rooted mx xs) = case mx of
+  Nothing -> "(NoRoot) [" ++ concatMap showTail xs ++ "] "
+  Just x  -> "(Root) [" ++ concatMap showTail xs ++ "] "
 
 instance (Eq t) => Monoid (RUPTrie t x) where
   mempty = Rooted Nothing []
diff --git a/src/Data/Trie/Pred/Unified/Tail.hs b/src/Data/Trie/Pred/Unified/Tail.hs
--- a/src/Data/Trie/Pred/Unified/Tail.hs
+++ b/src/Data/Trie/Pred/Unified/Tail.hs
@@ -4,6 +4,7 @@
 
 module Data.Trie.Pred.Unified.Tail
   ( UPTrie (..)
+  , showTail
   , lookup
   , lookupNearestParent
   , merge
@@ -29,6 +30,10 @@
         -> Maybe (r -> x)
         -> [UPTrie t (r -> x)]
         -> UPTrie t x
+
+showTail :: (Show t) => UPTrie t x -> String
+showTail (UMore t mx xs) = "(UMore " ++ show t ++ ") [" ++ concatMap showTail xs ++ "] "
+showTail (UPred t p mx xs) = "(UPred " ++ show t ++ ") [" ++ concatMap showTail xs ++ "] "
 
 
 -- | Overwrites when similar, leaves untouched when not
