diff --git a/MemoTrie.cabal b/MemoTrie.cabal
--- a/MemoTrie.cabal
+++ b/MemoTrie.cabal
@@ -1,5 +1,5 @@
 Name:                MemoTrie
-Version:             0.4.2
+Version:             0.4.3
 Cabal-Version:       >= 1.2
 Synopsis:            Trie-based memo functions
 Category:            Data
diff --git a/src/Data/MemoTrie.hs b/src/Data/MemoTrie.hs
--- a/src/Data/MemoTrie.hs
+++ b/src/Data/MemoTrie.hs
@@ -317,6 +317,33 @@
 
 -}
 
+{-
+instance (HasTrie a, Monoid b) => Monoid (a :->: b) where
+  mempty  = trie mempty
+  s `mappend` t = trie (untrie s `mappend` untrie t)
+
+instance HasTrie a => Functor ((:->:) a) where
+  fmap f t      = trie (fmap f (untrie t))
+
+instance HasTrie a => Applicative ((:->:) a) where
+  pure b        = trie (pure b)
+  tf <*> tx     = trie (untrie tf <*> untrie tx)
+
+instance HasTrie a => Monad ((:->:) a) where
+  return a      = trie (return a)
+  u >>= k       = trie (untrie u >>= untrie . k)
+
+-- instance Category (:->:) where
+--   id            = trie id
+--   s . t         = trie (untrie s . untrie t)
+
+-- instance Arrow (:->:) where
+--   arr f         = trie (arr f)
+--   first t       = trie (first (untrie t))
+-}
+
+-- Simplify, using inTrie, inTrie2
+
 instance (HasTrie a, Monoid b) => Monoid (a :->: b) where
   mempty  = trie mempty
   mappend = inTrie2 mappend
