diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+0.5
+---
+* Added `(>$)`
+* Added instances for `GHC.Generics`
+
 0.4.4
 -----
 * Fixed compatibility with GHC 7.7 and tightened `Safe` Haskell support.
diff --git a/Data/Functor/Contravariant.hs b/Data/Functor/Contravariant.hs
--- a/Data/Functor/Contravariant.hs
+++ b/Data/Functor/Contravariant.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#ifdef __GLASGOW_HASKELL__
+{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 #if __GLASGOW_HASKELL__ >= 702
 #if MIN_VERSION_transformers(0,3,0)
@@ -12,12 +12,10 @@
 {-# LANGUAGE Trustworthy #-}
 #endif
 #endif
-#endif
-
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Functor.Contravariant
--- Copyright   :  (C) 2007-2011 Edward Kmett
+-- Copyright   :  (C) 2007-2014 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -58,10 +56,11 @@
 import Data.Functor.Constant
 import Data.Functor.Compose
 import Data.Functor.Reverse
-import Data.Proxy
+import GHC.Generics
 import Prelude hiding ((.),id)
-#ifdef __GLASGOW_HASKELL__
 import Data.Typeable
+#if __GLASGOW_HASKELL__ < 707
+import Data.Proxy
 #endif
 
 -- | Any instance should be subject to the following laws:
@@ -76,8 +75,14 @@
 class Contravariant f where
   contramap :: (a -> b) -> f b -> f a
 
-infixl 4 >$<, >$$<
+  -- | Replace all locations in the output with the same value.
+  -- The default definition is @'contramap' . 'const'@, but this may be
+  -- overridden with a more efficient version.
+  (>$) :: b -> f b -> f a
+  (>$) = contramap . const
 
+infixl 4 >$, >$<, >$$<
+
 (>$<) :: Contravariant f => (a -> b) -> f b -> f a
 (>$<) = contramap
 {-# INLINE (>$<) #-}
@@ -85,6 +90,32 @@
 (>$$<) :: Contravariant f => f b -> (a -> b) -> f a
 (>$$<) = flip contramap
 {-# INLINE (>$$<) #-}
+
+instance Contravariant V1 where
+  contramap _ x = x `seq` undefined
+
+instance Contravariant U1 where
+  contramap _ U1 = U1
+
+instance Contravariant f => Contravariant (Rec1 f) where
+  contramap f (Rec1 fp)= Rec1 (contramap f fp)
+
+instance Contravariant f => Contravariant (M1 i c f) where
+  contramap f (M1 fp) = M1 (contramap f fp)
+
+instance Contravariant (K1 i c) where
+  contramap _ (K1 c) = K1 c
+
+instance (Contravariant f, Contravariant g) => Contravariant (f :*: g) where
+  contramap f (xs :*: ys) = contramap f xs :*: contramap f ys
+
+instance (Functor f, Contravariant g) => Contravariant (f :.: g) where
+  contramap f (Comp1 fg) = Comp1 (fmap (contramap f) fg)
+  {-# INLINE contramap #-}
+
+instance (Contravariant f, Contravariant g) => Contravariant (f :+: g) where
+  contramap f (L1 xs) = L1 (contramap f xs)
+  contramap f (R1 ys) = R1 (contramap f ys)
 
 instance (Contravariant f, Contravariant g) => Contravariant (Product f g) where
   contramap f (Pair a b) = Pair (contramap f a) (contramap f b)
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.4.4
+version:       0.5
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -27,6 +27,10 @@
     tagged              >= 0.4.4 && < 1,
     transformers        >= 0.2   && < 0.4,
     transformers-compat >= 0.1   && < 1
+
+  if impl(ghc >= 7.4 && < 7.6)
+    build-depends: ghc-prim
+
   exposed-modules:
     Data.Functor.Contravariant
     Data.Functor.Contravariant.Compose
