diff --git a/Data/Functor/Contravariant.hs b/Data/Functor/Contravariant.hs
--- a/Data/Functor/Contravariant.hs
+++ b/Data/Functor/Contravariant.hs
@@ -32,6 +32,10 @@
   , Op(..)
   ) where
 
+import Control.Applicative
+import Data.Functor.Product
+import Data.Functor.Constant
+
 -- | Any instance should be subject to the following laws:
 --
 -- > contramap id = id
@@ -81,10 +85,20 @@
 defaultEquivalence :: Eq a => Equivalence a
 defaultEquivalence = Equivalence (==)
 
-
-
 -- | Dual function arrows.
 newtype Op a b = Op { getOp :: b -> a } 
 
 instance Contravariant (Op a) where
   contramap f g = Op (getOp g . f)
+
+-- | Data.Functor.Product
+instance (Contravariant f, Contravariant g) => Contravariant (Product f g) where
+  contramap f (Pair a b) = Pair (contramap f a) (contramap f b)
+
+-- | Data.Functor.Constant
+instance Contravariant (Constant a) where
+  contramap _ (Constant a) = Constant a
+
+-- | Control.Applicative.Const
+instance Contravariant (Const a) where
+  contramap _ (Const a) = Const a
diff --git a/Data/Functor/Contravariant/Compose.hs b/Data/Functor/Contravariant/Compose.hs
new file mode 100644
--- /dev/null
+++ b/Data/Functor/Contravariant/Compose.hs
@@ -0,0 +1,37 @@
+-- |
+-- Module      :  Data.Functor.Contravariant.Compose
+-- Copyright   :  (c) Edward Kmett 2010
+-- License     :  BSD3
+--
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- Composition of contravariant functors.
+
+module Data.Functor.Contravariant.Compose 
+  ( Compose(..)
+  , ComposeFC(..)
+  , ComposeCF(..)
+  ) where
+
+import Data.Functor.Contravariant
+
+-- | Composition of two contravariant functors
+newtype Compose f g a = Compose { getCompose :: f (g a) }
+
+instance (Contravariant f, Contravariant g) => Functor (Compose f g) where
+    fmap f (Compose x) = Compose (contramap (contramap f) x)
+
+-- | Composition of covariant and contravariant functors
+newtype ComposeFC f g a = ComposeFC { getComposeFC :: f (g a) } 
+
+instance (Functor f, Contravariant g) => Contravariant (ComposeFC f g) where
+    contramap f (ComposeFC x) = ComposeFC (fmap (contramap f) x)
+
+-- | Composition of contravariant and covariant functors
+newtype ComposeCF f g a = ComposeCF { getComposeCF :: f (g a) } 
+
+instance (Contravariant f, Functor g) => Contravariant (ComposeCF f g) where
+    contramap f (ComposeCF x) = ComposeCF (contramap (fmap f) x)
+
diff --git a/contravariant.cabal b/contravariant.cabal
--- a/contravariant.cabal
+++ b/contravariant.cabal
@@ -1,6 +1,6 @@
 name:          contravariant
 category:      Control, Data
-version:       0.1.1
+version:       0.1.2
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -18,6 +18,10 @@
   location: git://github.com/ekmett/contravariant.git
 
 library
-  build-depends: base < 4.5
-  exposed-modules: Data.Functor.Contravariant
+  build-depends: 
+    base < 4.5,
+    transformers >= 0.2.2 && < 0.3
+  exposed-modules: 
+    Data.Functor.Contravariant
+    Data.Functor.Contravariant.Compose
   ghc-options: -Wall 
