diff --git a/Data/Universe.hs b/Data/Universe.hs
--- a/Data/Universe.hs
+++ b/Data/Universe.hs
@@ -50,6 +50,10 @@
 instance (Universe a, Universe b, Universe c, Universe d) => Universe (a, b, c, d) where universe = [(a,b,c,d) | (((a,b),c),d) <- universe +*+ universe +*+ universe +*+ universe]
 instance (Universe a, Universe b, Universe c, Universe d, Universe e) => Universe (a, b, c, d, e) where universe = [(a,b,c,d,e) | ((((a,b),c),d),e) <- universe +*+ universe +*+ universe +*+ universe +*+ universe]
 
+instance Finite a => Universe [a] where universe = [] : interleave [[h:t | t <- universe] | h <- universe]
+-- probably also possible, but wait until somebody demands it:
+-- instance Universe a => Universe [a] where universe = {- something using choices and diagonal and replicate n universe -}
+
 instance Universe All where universe = map All universe
 instance Universe Any where universe = map Any universe
 instance Universe a => Universe (Sum     a) where universe = map Sum     universe
diff --git a/Data/Universe/Instances.hs b/Data/Universe/Instances.hs
--- a/Data/Universe/Instances.hs
+++ b/Data/Universe/Instances.hs
@@ -1,10 +1,11 @@
 module Data.Universe.Instances (
 	-- | A convenience module that imports the submodules @Eq@, @Ord@, @Show@,
-	-- and @Read@ to provide instances of these classes for functions over
-	-- finite inputs.
+	-- @Read@, and @Traversable@ to provide instances of these classes for
+	-- functions over finite inputs.
 	) where
 
 import Data.Universe.Instances.Eq
 import Data.Universe.Instances.Ord
 import Data.Universe.Instances.Show
 import Data.Universe.Instances.Read
+import Data.Universe.Instances.Traversable
diff --git a/Data/Universe/Instances/Traversable.hs b/Data/Universe/Instances/Traversable.hs
new file mode 100644
--- /dev/null
+++ b/Data/Universe/Instances/Traversable.hs
@@ -0,0 +1,18 @@
+module Data.Universe.Instances.Traversable (
+	-- | A 'Foldable' instance for functions, given the input is 'Finite', and
+	-- a 'Traversable' instance for functions, given the input is 'Ord' and
+	-- 'Finite'.
+	) where
+
+import Control.Applicative
+import Data.Foldable
+import Data.Map ((!), fromList)
+import Data.Monoid
+import Data.Traversable
+import Data.Universe
+
+instance Finite e => Foldable ((->) e) where
+	foldMap f g = mconcat $ map (f . g) universeF
+
+instance (Ord e, Finite e) => Traversable ((->) e) where
+	sequenceA f = (!) . fromList <$> sequenceA [(,) x <$> f x | x <- universeF]
diff --git a/universe.cabal b/universe.cabal
--- a/universe.cabal
+++ b/universe.cabal
@@ -1,5 +1,5 @@
 name:                universe
-version:             0.3
+version:             0.4
 synopsis:            Classes for types where we know all the values
 description:         A small package, in the spirit of data-default, which allows the munging of finite and recursively enumerable types
 license:             BSD3
@@ -27,7 +27,8 @@
                        Data.Universe.Instances.Eq,
                        Data.Universe.Instances.Ord,
                        Data.Universe.Instances.Read,
-                       Data.Universe.Instances.Show
+                       Data.Universe.Instances.Show,
+                       Data.Universe.Instances.Traversable
   other-modules:       Data.Universe.Class
   hs-source-dirs:      .
   if impl(ghc >= 7.4)
