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.11
+Version:                0.0.12
 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 (..)
+  , assignLit
   , showTrie
   , merge
   , lookup
@@ -10,7 +11,7 @@
   ) where
 
 import Prelude hiding (lookup)
-import Data.Trie.Pred.Unified.Tail hiding (lookup, lookupNearestParent, merge)
+import Data.Trie.Pred.Unified.Tail hiding (lookup, lookupNearestParent, merge, assignLit)
 import qualified Data.Trie.Pred.Unified.Tail as NU
 import Data.Monoid
 import Data.Maybe (fromMaybe)
@@ -28,6 +29,11 @@
 instance (Eq t) => Monoid (RUPTrie t x) where
   mempty = Rooted Nothing []
   mappend = Data.Trie.Pred.Unified.merge
+
+assignLit :: Eq t => [t] -> Maybe x -> RUPTrie t x -> RUPTrie t x
+assignLit [] mx (Rooted my ys) = Rooted mx ys
+assignLit ts mx (Rooted my ys) = Rooted my $
+  map (NU.assignLit (NE.fromList ts) mx) ys
 
 merge :: (Eq t) => RUPTrie t x -> RUPTrie t x -> RUPTrie t x
 merge (Rooted mx xs) (Rooted my ys) =
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
@@ -5,6 +5,7 @@
 module Data.Trie.Pred.Unified.Tail
   ( UPTrie (..)
   , showTail
+  , assignLit
   , lookup
   , lookupNearestParent
   , merge
@@ -35,6 +36,13 @@
 showTail (UMore t mx xs) = "(UMore " ++ show t ++ ") [" ++ concatMap showTail xs ++ "] "
 showTail (UPred t p mx xs) = "(UPred " ++ show t ++ ") [" ++ concatMap showTail xs ++ "] "
 
+assignLit :: (Eq t) => NonEmpty t -> Maybe x -> UPTrie t x -> UPTrie t x
+assignLit (t:|ts) mx yy@(UMore p my ys)
+  | t == p = case ts of
+               [] -> UMore p mx ys
+               _  -> UMore p my $ map (assignLit (NE.fromList ts) mx) ys
+  | otherwise = yy
+assignLit _ _ yy@(UPred _ _ _ _) = yy
 
 -- | Overwrites when similar, leaves untouched when not
 merge :: (Eq t) => UPTrie t x -> UPTrie t x -> UPTrie t x
