diff --git a/MemoTrie.cabal b/MemoTrie.cabal
--- a/MemoTrie.cabal
+++ b/MemoTrie.cabal
@@ -1,5 +1,5 @@
 Name:                MemoTrie
-Version:             0.6.6
+Version:             0.6.7
 Cabal-Version:       >= 1.10
 Synopsis:            Trie-based memo functions
 Category:            Data
@@ -10,7 +10,7 @@
   .
   Project wiki page: <http://haskell.org/haskellwiki/MemoTrie>
   .
-  &#169; 2008-2015 by Conal Elliott; BSD3 license.
+  &#169; 2008-2016 by Conal Elliott; BSD3 license.
 Homepage:            https://github.com/conal/MemoTrie
 Author:              Conal Elliott 
 Maintainer:          conal@conal.net
diff --git a/src/Data/MemoTrie.hs b/src/Data/MemoTrie.hs
--- a/src/Data/MemoTrie.hs
+++ b/src/Data/MemoTrie.hs
@@ -55,12 +55,14 @@
   , memo, memo2, memo3, mup
   , inTrie, inTrie2, inTrie3
   -- , untrieBits
-  , trieGeneric, untrieGeneric, enumerateGeneric, Reg   
+  , trieGeneric, untrieGeneric, enumerateGeneric, Reg
+  , memoFix
   ) where
 
 -- Export the parts of HasTrie separately in order to get the associated data
 -- type constructors, so I can define instances of other classes on them.
 
+import Data.Function (fix)
 import Data.Bits
 import Data.Word
 import Data.Int
@@ -168,6 +170,42 @@
 memo2 = mup memo
 memo3 = mup memo2
 
+-- | Memoizing recursion. Use like `fix`.
+memoFix :: HasTrie a => ((a -> b) -> (a -> b)) -> (a -> b)
+memoFix h = fix (memo . h)
+
+#if 0
+-- Equivalently,
+
+memoFix h = fix (\ f' -> memo (h f'))
+
+memoFix h = f'
+  where f' = memo (h f')
+
+memoFix h = f'
+ where
+   f' = memo f
+   f  = h f'
+#endif
+
+#if 0
+-- Example
+
+fibF :: (Integer -> Integer) -> (Integer -> Integer)
+fibF _ 0 = 1
+fibF _ 1 = 1
+fibF f n = f (n-1) + f (n-2)
+
+fib :: Integer -> Integer
+fib = fix fibF
+
+fib' :: Integer -> Integer
+fib' = memoFix fibF
+
+-- Try fib 30 vs fib' 30
+#endif
+
+
 -- | Apply a unary function inside of a trie
 inTrie :: (HasTrie a, HasTrie c) =>
           ((a  ->  b) -> (c  ->  d))
@@ -685,4 +723,3 @@
 liftSum :: Either (f a) (g a) -> (f :+: g) a 
 liftSum = either L1 R1
 {-# INLINEABLE liftSum #-}
-
