diff --git a/Benchmarks.hs b/Benchmarks.hs
--- a/Benchmarks.hs
+++ b/Benchmarks.hs
@@ -10,7 +10,7 @@
     ws <- fmap lines $ readFile dictPath
     let dawg = fromList ws
     test [
-        bench "dawg generation" $ whnf (char . fromList) ws,
+        bench "dawg generation" $ whnf fromList ws,
         bench "enlist suffixes" $ nf toList dawg,
         bench "serialize"       $ nfIO $ toFile "twl06.dawg" dawg,
         bench "deserialize"     $ nfIO $ fromFile "twl06.dawg"
diff --git a/Data/DAWG/Packed.hs b/Data/DAWG/Packed.hs
--- a/Data/DAWG/Packed.hs
+++ b/Data/DAWG/Packed.hs
@@ -48,8 +48,15 @@
     ) where
 
 import qualified Data.Vector.Unboxed as V
+
+
 import qualified Data.HashMap.Strict as HM
 import qualified Control.Monad.State.Strict as S
+
+import Control.Monad.ST.Strict
+import Data.STRef
+
+import Data.Function
 import Control.DeepSeq
 import Control.Arrow
 import Data.Binary
@@ -218,6 +225,38 @@
     go n = [[char n] | endOfWord n] ++ (map (char n:) . go =<< children n)
 
 
+-- trieToNode :: Trie -> Node
+-- trieToNode n = runST $ do
+--   m <- HT.new :: ST s (HashTable s [Word32] Int)
+--   HT.insert m [] 0  
+--   iref <- newSTRef (0 :: Int)
+
+--   let adjustChd = \case
+--         []   -> (0, [])
+--         [x]  -> (1, [x .|. 2])
+--         x:xs -> (succ *** (x:)) (adjustChd xs)
+
+--   root <- ($ n) $ fix $ \go node@TrieNode{..} -> do
+--     xs <- mapM go chd
+--     let (len, xs') = adjustChd xs
+--     i <- readSTRef iref
+--     pack val False eow `fmap`
+--       (maybe
+--         (do HT.insert m xs' $! (i + 1)
+--             writeSTRef iref $! (i + len)
+--             pure $! (i + 1))
+--         pure
+--         =<< (HT.lookup m xs'))
+
+--   i <- readSTRef iref
+--   mlist <- HT.toList m
+--   let assocs = (i + 1, root .|. 2):
+--         [(i', x) | (xs, i) <- mlist,
+--                    (i', x) <- zip [i..] xs]
+--       vec = V.unsafeAccum (flip const) (V.replicate (i + 2) 0) assocs
+
+--   pure $ unpack (V.unsafeLast vec) vec
+
 reduce :: Trie -> S.State (HM.HashMap [Word32] Int, Int) Word32
 reduce !node@TrieNode{..} = do
     xs <- mapM reduce chd
@@ -240,7 +279,7 @@
                                              (i', x) <- zip [i..] xs]
     vec = V.unsafeAccum (flip const) (V.replicate (i + 2) 0) assocs
     in unpack (V.unsafeLast vec) vec
-
+  
 
 -- | Allows for faster DAWG generation than 'fromList'. The input list must be in ascending order, but this is not checked.
 fromAscList :: [String] -> Node
diff --git a/packed-dawg.cabal b/packed-dawg.cabal
--- a/packed-dawg.cabal
+++ b/packed-dawg.cabal
@@ -1,7 +1,7 @@
 
 
 name:                packed-dawg
-version:             0.2.0.7
+version:             0.2.0.8
 synopsis:            Generation and traversal of highly compressed directed acyclic word graphs. 
 description:         Generation and traversal of highly compressed directed acyclic word graphs.
 license:             BSD3
@@ -11,7 +11,7 @@
 category:            Data
 build-type:          Simple
 cabal-version:       >=1.8
-data-files:          TWL06.txt
+data-files:          TWL06.txt, ridyhew.txt
 
 Source-Repository head
     Type: git
@@ -19,25 +19,34 @@
 
 library
   exposed-modules:      Data.DAWG.Packed      
-  build-depends:        base >= 4.6.0 && <= 4.9, vector == 0.10.*, mtl >=2.1, 
-                        vector-binary-instances == 0.2.1.*, binary == 0.7.*, deepseq>=1.3, unordered-containers >= 0.2
+  build-depends:        base >= 4.6.0 && <= 4.9,
+                        binary >= 0.7.0,
+                        deepseq>=1.3,
+                        mtl >=2.1,
+                        unordered-containers >= 0.2,
+                        vector >= 0.10.0,
+                        vector-binary-instances >= 0.2.1.0
 
 test-suite test
   main-is:            Tests.hs
   type:               exitcode-stdio-1.0
 
-  build-depends:      base >= 4.6.0 && <= 4.9, vector == 0.10.*, mtl >=2.1, 
-                      vector-binary-instances == 0.2.1.*, binary == 0.7.*, deepseq>=1.3, unordered-containers >= 0.2,
-                      QuickCheck >= 2.5, HUnit >= 1.2, tasty >= 0.3, tasty-quickcheck >= 0.3, tasty-hunit >= 0.2
+  build-depends:      base >= 4.6.0 && <= 4.9, vector >= 0.10.0, mtl >=2.1, 
+                      vector-binary-instances >= 0.2.1.0, binary >= 0.7.0, 
+                      deepseq>=1.3, unordered-containers >= 0.2,
+                      QuickCheck >= 2.5, HUnit >= 1.2, tasty >= 0.3, 
+                      tasty-quickcheck >= 0.3, tasty-hunit >= 0.2
 
   ghc-options:        -O2 -rtsopts
 
 benchmark bench-dawg-gen
     main-is:            Benchmarks.hs
-    Build-depends:      base >= 4.6.0 && <= 4.9, vector == 0.10.*, mtl >=2.1, 
-                        vector-binary-instances == 0.2.1.*, binary == 0.7.*, deepseq>=1.3, unordered-containers >= 0.2,
-
+    Build-depends:      base >= 4.6.0 && <= 4.9, vector >= 0.10.0, mtl >=2.1, 
+                        vector-binary-instances >= 0.2.1.0, binary >= 0.7.0, 
+                        deepseq >= 1.3, unordered-containers >= 0.2,
                         criterion >= 1.0
+
+
 
     ghc-options:        -O2 -rtsopts
     type:               exitcode-stdio-1.0
diff --git a/ridyhew.txt b/ridyhew.txt
new file mode 100644
# file too large to diff: ridyhew.txt
