diff --git a/MemoTrie.cabal b/MemoTrie.cabal
--- a/MemoTrie.cabal
+++ b/MemoTrie.cabal
@@ -1,5 +1,5 @@
 Name:                MemoTrie
-Version:             0.6.7
+Version:             0.6.8
 Cabal-Version:       >= 1.10
 Synopsis:            Trie-based memo functions
 Category:            Data
@@ -14,7 +14,7 @@
 Homepage:            https://github.com/conal/MemoTrie
 Author:              Conal Elliott 
 Maintainer:          conal@conal.net
-Copyright:           (c) 2008-2015 by Conal Elliott
+Copyright:           (c) 2008-2016 by Conal Elliott
 License:             BSD3
 License-File:        COPYING
 Stability:           experimental
diff --git a/src/Data/MemoTrie.hs b/src/Data/MemoTrie.hs
--- a/src/Data/MemoTrie.hs
+++ b/src/Data/MemoTrie.hs
@@ -9,7 +9,7 @@
 ----------------------------------------------------------------------
 -- |
 -- Module      :  Data.MemoTrie
--- Copyright   :  (c) Conal Elliott 2008-2012
+-- Copyright   :  (c) Conal Elliott 2008-2016
 -- License     :  BSD3
 -- 
 -- Maintainer  :  conal@conal.net
@@ -315,6 +315,16 @@
     BoolTrie f t
 -}
 
+instance HasTrie a => HasTrie (Maybe a) where
+  data (:->:) (Maybe a) b = MaybeTrie b (a :->: b)
+  trie f = MaybeTrie (f Nothing) (trie (f . Just))
+  untrie (MaybeTrie nothing_val a_trie) = maybe nothing_val (untrie a_trie)
+  enumerate (MaybeTrie nothing_val a_trie) = (Nothing, nothing_val) : enum' Just a_trie
+
+instance Newtype (Maybe a :->: x) where
+  type O (Maybe a :->: x) = (x, a :->: x)
+  pack (a,f) = MaybeTrie a f
+  unpack (MaybeTrie a f) = (a,f)
 
 instance (HasTrie a, HasTrie b) => HasTrie (Either a b) where
   data (Either a b) :->: x = EitherTrie (a :->: x) (b :->: x)
