diff --git a/functor-combo.cabal b/functor-combo.cabal
--- a/functor-combo.cabal
+++ b/functor-combo.cabal
@@ -1,5 +1,5 @@
 Name:                functor-combo
-Version:             0.3.1
+Version:             0.3.3
 Cabal-Version:       >= 1.6
 Synopsis:            Functor combinators with tries & zippers
 Category:            Data
diff --git a/src/FunctorCombo/Pair.hs b/src/FunctorCombo/Pair.hs
--- a/src/FunctorCombo/Pair.hs
+++ b/src/FunctorCombo/Pair.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE DeriveFunctor, DeriveDataTypeable #-}
 {-# LANGUAGE TypeOperators, TypeFamilies #-}
 {-# OPTIONS_GHC -Wall #-}
 
@@ -31,6 +31,8 @@
 import Data.Foldable (Foldable(..))
 import Data.Traversable (Traversable(..))
 import Control.Applicative (Applicative(..),liftA2)
+import Data.Typeable (Typeable)
+import Data.Data (Data)
 
 import FunctorCombo.Functor
 import FunctorCombo.ParScan
@@ -41,7 +43,7 @@
 
 infixl 1 :#
 -- | Uniform pairs
-data Pair a = a :# a deriving (Functor,Eq,Show)
+data Pair a = a :# a deriving (Functor,Eq,Show,Typeable,Data)
 
 -- Interpreting Pair a as Bool -> a or as Vec2 a, the instances follow
 -- inevitably from the principle of type class morphisms.
diff --git a/src/FunctorCombo/StrictMemo.hs b/src/FunctorCombo/StrictMemo.hs
--- a/src/FunctorCombo/StrictMemo.hs
+++ b/src/FunctorCombo/StrictMemo.hs
@@ -2,8 +2,11 @@
            , FlexibleContexts, DeriveFunctor, StandaloneDeriving
            , GADTs
  #-}
-{-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-unused-imports #-}  -- temporary while testing
+
+{-# OPTIONS_GHC -Wall -fno-warn-orphans  #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}  -- TEMP
+-- {-# OPTIONS_GHC -fno-warn-unused-imports #-}  -- TEMP
+
 ----------------------------------------------------------------------
 -- |
 -- Module      :  FunctorCombo.StrictMemo
@@ -25,16 +28,17 @@
   ) where
 
 import Data.Functor ((<$>))
-import Data.Foldable (Foldable,toList)
+import Data.Foldable (Foldable(..),toList)
+import Data.Traversable (Traversable(..))
 import Control.Applicative (Applicative(..),liftA2)
-import Control.Arrow (first)
+-- import Control.Arrow (first)
 
-import Data.Tree
+-- import Data.Tree
 
 import qualified Data.IntTrie as IT  -- data-inttrie
 import Data.Tree
 
-import Control.Compose (result,(<~))  -- TypeCompose
+-- import Control.Compose (result,(<~))  -- TypeCompose
 
 import TypeUnary.Vec (Z,S,Vec(..),IsNat(..),Nat(..))
 
@@ -506,6 +510,15 @@
 pureV :: Applicative (Trie k) => Nat n -> a -> TrieTree n k a
 pureV Zero     = L
 pureV (Succ n) = B . pure . pureV n
+
+instance Foldable (Trie k) => Foldable (TrieTree n k) where
+  foldMap f (L a)  = f a
+  foldMap f (B ts) = (foldMap.foldMap) f ts
+
+instance (Functor (Trie k), Foldable (Trie k), Traversable (Trie k)) =>
+         Traversable (TrieTree n k) where
+  traverse f (L a)  = L <$> f a
+  traverse f (B ts) = B <$> (traverse.traverse) f ts
 
 instance (HasTrie k, Functor (Trie k), IsNat n) => HasTrie (Vec n k) where
   type Trie (Vec n k) = TrieTree n k
