diff --git a/Data/Universe/Instances/Eq.hs b/Data/Universe/Instances/Eq.hs
new file mode 100644
--- /dev/null
+++ b/Data/Universe/Instances/Eq.hs
@@ -0,0 +1,11 @@
+module Data.Universe.Instances.Eq (
+	-- | An 'Eq' instance for functions, given the input is 'Finite' and the
+	-- output is 'Eq'. Compares pointwise.
+	Eq(..)
+	) where
+
+import Data.Monoid
+import Data.Universe.Instances.Base
+
+instance (Finite a, Eq b) => Eq (a -> b) where
+	f == g = and [f x == g x | x <- universeF]
diff --git a/Data/Universe/Instances/Ord.hs b/Data/Universe/Instances/Ord.hs
new file mode 100644
--- /dev/null
+++ b/Data/Universe/Instances/Ord.hs
@@ -0,0 +1,13 @@
+module Data.Universe.Instances.Ord (
+	-- | An 'Ord' instance for functions, given the input is 'Finite' and the
+	-- output is 'Ord'. Compares pointwise, with higher priority to inputs
+	-- that appear earlier in 'universeF'.
+	Ord(..)
+	) where
+
+import Data.Monoid
+import Data.Universe.Instances.Base
+import Data.Universe.Instances.Eq
+
+instance (Finite a, Ord b) => Ord (a -> b) where
+	f `compare` g = mconcat [f x `compare` g x | x <- universeF]
diff --git a/Data/Universe/Instances/Read.hs b/Data/Universe/Instances/Read.hs
new file mode 100644
--- /dev/null
+++ b/Data/Universe/Instances/Read.hs
@@ -0,0 +1,13 @@
+module Data.Universe.Instances.Read (
+	-- | A 'Read' instance for functions, given the input is 'Finite' and
+	-- 'Ord' and both the input and output are 'Read'.
+	Read(..)
+	) where
+
+import Data.Map (fromList, (!))
+import Data.Universe.Instances.Base
+
+-- actually, the "Finite a" part of the context wouldn't be inferred if you
+-- asked GHC -- but it's kind of hopeless otherwise!
+instance (Finite a, Ord a, Read a, Read b) => Read (a -> b) where
+	readsPrec n s = [((fromList v !), s') | (v, s') <- readsPrec n s]
diff --git a/Data/Universe/Instances/Show.hs b/Data/Universe/Instances/Show.hs
new file mode 100644
--- /dev/null
+++ b/Data/Universe/Instances/Show.hs
@@ -0,0 +1,10 @@
+module Data.Universe.Instances.Show (
+	-- | A 'Show' instance for functions, given the input is 'Finite' and both
+	-- the input and output are 'Show'.
+	Show(..)
+	) where
+
+import Data.Universe.Instances.Base
+
+instance (Finite a, Show a, Show b) => Show (a -> b) where
+	showsPrec n f = showsPrec n [(a, f a) | a <- universeF]
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,19 @@
+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'.
+	Foldable(..), Traversable(..)
+	) where
+
+import Control.Applicative
+import Data.Foldable
+import Data.Map ((!), fromList)
+import Data.Monoid
+import Data.Traversable
+import Data.Universe.Instances.Base
+
+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/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2013, Daniel Wagner
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Daniel Wagner nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+! This software is provided by the copyright holders and contributors
+! "as is" and any express or implied warranties, including, but not
+! limited to, the implied warranties of merchantability and fitness for
+! a particular purpose are disclaimed. In no event shall the copyright
+! owner or contributors be liable for any direct, indirect, incidental,
+! special, exemplary, or consequential damages (including, but not
+! limited to, procurement of substitute goods or services; loss of use,
+! data, or profits; or business interruption) however caused and on any
+! theory of liability, whether in contract, strict liability, or tort
+! (including negligence or otherwise) arising in any way out of the use
+! of this software, even if advised of the possibility of such damage.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/universe-reverse-instances.cabal b/universe-reverse-instances.cabal
new file mode 100644
--- /dev/null
+++ b/universe-reverse-instances.cabal
@@ -0,0 +1,30 @@
+name:                universe-reverse-instances
+version:             1.0
+synopsis:            instances of standard classes that are made possible by enumerations
+homepage:            https://github.com/dmwit/universe
+license:             BSD3
+license-file:        LICENSE
+author:              Daniel Wagner
+maintainer:          me@dmwit.com
+copyright:           Daniel Wagner 2014
+category:            Data
+build-type:          Simple
+cabal-version:       >=1.10
+source-repository head
+    type:            git
+    location:        https://github.com/dmwit/universe
+source-repository this
+    type:            git
+    location:        https://github.com/dmwit/universe
+    tag:             1.0
+
+library
+  exposed-modules:     Data.Universe.Instances.Eq,
+                       Data.Universe.Instances.Ord,
+                       Data.Universe.Instances.Read,
+                       Data.Universe.Instances.Show,
+                       Data.Universe.Instances.Traversable
+  build-depends:       base                    >=4   && <5  ,
+                       containers              >=0.5 && <0.6,
+                       universe-instances-base >=1.0 && <1.1
+  default-language:    Haskell2010
