diff --git a/Control/DeepSeq.hs b/Control/DeepSeq.hs
--- a/Control/DeepSeq.hs
+++ b/Control/DeepSeq.hs
@@ -13,7 +13,8 @@
 -- 
 
 module Control.DeepSeq (
-     DeepSeq(..), DeepSeqIntegral, DeepSeqOrd
+     deepseq,
+     NFData(..),
   ) where
 
 import Data.Int
@@ -27,161 +28,163 @@
 import Data.Tree
 import Data.Array
 
+-- | Fully evaluates its argument.  The name 'deepseq' is used to
+-- illustrate the relationship to 'seq': where 'seq' is shallow in
+-- the sense that it only evaluates the top level of its argument,
+-- 'deepseq' traverses the entire data structure evaluating it
+-- completely.
+--
+-- 'deepseq' can be useful for forcing pending exceptions,
+-- eradicating space leaks, or forcing lazy I/O to happen.  It is
+-- also useful in conjunction with parallel Strategies (see the
+-- @parallel@ package).
+--
+-- There is no guarantee about the ordering of evaluation.  The
+-- implementation may evaluate the components of the structure in
+-- any order or in parallel.  To impose an actual order on
+-- evaluation, use 'pseq' from "Control.Parallel" in the
+-- @parallel@ package.
+--
+deepseq :: NFData a => a -> b -> b
+deepseq a b = rnf a `seq` b
+
 -- A class of types that can be fully evaluated.
-class DeepSeq a where
-    -- | Fully evaluates its argument.  The name 'deepseq' is used to
-    -- illustrate the relationship to 'seq': where 'seq' is shallow in
-    -- the sense that it only evaluates the top level of its argument,
-    -- 'deepseq' traverses the entire data structure evaluating it
-    -- completely.
-    --
-    -- 'deepseq' can be useful for forcing pending exceptions,
-    -- eradicating space leaks, or forcing lazy I/O to happen.  It is
-    -- also useful in conjunction with parallel Strategies (see the
-    -- @parallel@ package).
-    --
-    -- There is no guarantee about the ordering of evaluation.  The
-    -- implementation may evaluate the components of the structure in
-    -- any order or in parallel.  To impose an actual order on
-    -- evaluation, use 'pseq' from "Control.Parallel" in the
-    -- @parallel@ package.
+class NFData a where
+    -- | rnf should reduce its argument to normal form (that is, fully
+    -- evaluate all sub-components), and then return '()'.
+    -- 
+    -- The default implementation of 'rnf' is 
     --
-    -- The default implementation of 'deepseq' is simply 'seq', which
-    -- may be convenient when defining instances for data types with
+    -- > rnf a = a `seq` ()
+    -- 
+    -- which may be convenient when defining instances for data types with
     -- no unevaluated fields (e.g. enumerations).
-    --
-    deepseq :: a -> ()
-    deepseq a = a `seq` ()
-
-class (DeepSeq a, Integral a) => DeepSeqIntegral a
-class (DeepSeq a, Ord a) => DeepSeqOrd a
-
-instance DeepSeq Int 
-instance DeepSeq Word
-instance DeepSeq Integer
-instance DeepSeq Float
-instance DeepSeq Double
+    rnf :: a -> ()
+    rnf a = a `seq` ()
 
-instance DeepSeq Char
-instance DeepSeq Bool
-instance DeepSeq ()
+instance NFData Int 
+instance NFData Word
+instance NFData Integer
+instance NFData Float
+instance NFData Double
 
-instance DeepSeq Int8
-instance DeepSeq Int16
-instance DeepSeq Int32
-instance DeepSeq Int64
+instance NFData Char
+instance NFData Bool
+instance NFData ()
 
-instance DeepSeq Word8
-instance DeepSeq Word16
-instance DeepSeq Word32
-instance DeepSeq Word64
+instance NFData Int8
+instance NFData Int16
+instance NFData Int32
+instance NFData Int64
 
-instance DeepSeqIntegral Int
-instance DeepSeqOrd Int
+instance NFData Word8
+instance NFData Word16
+instance NFData Word32
+instance NFData Word64
 
 --Rational and complex numbers.
 
-instance (Integral a, DeepSeq a) => DeepSeq (Ratio a) where
-  deepseq x = deepseq (numerator x, denominator x)
+instance (Integral a, NFData a) => NFData (Ratio a) where
+  rnf x = rnf (numerator x, denominator x)
 
-instance (RealFloat a, DeepSeq a) => DeepSeq (Complex a) where
-  deepseq (x:+y) = deepseq x `seq` 
-	         deepseq y `seq`
+instance (RealFloat a, NFData a) => NFData (Complex a) where
+  rnf (x:+y) = rnf x `seq` 
+               rnf y `seq`
                ()
 
-instance DeepSeq a => DeepSeq (Maybe a) where
-    deepseq Nothing  = ()
-    deepseq (Just x) = deepseq x
+instance NFData a => NFData (Maybe a) where
+    rnf Nothing  = ()
+    rnf (Just x) = rnf x
 
-instance (DeepSeq a, DeepSeq b) => DeepSeq (Either a b) where
-    deepseq (Left x)  = deepseq x
-    deepseq (Right y) = deepseq y
+instance (NFData a, NFData b) => NFData (Either a b) where
+    rnf (Left x)  = rnf x
+    rnf (Right y) = rnf y
 
-instance (DeepSeq k, DeepSeq a) => DeepSeq (Data.Map.Map k a) where
-    deepseq = deepseq . Data.Map.toList
+instance (NFData k, NFData a) => NFData (Data.Map.Map k a) where
+    rnf = rnf . Data.Map.toList
 
-instance DeepSeq a => DeepSeq (Data.Set.Set a) where
-    deepseq = deepseq . Data.Set.toList
+instance NFData a => NFData (Data.Set.Set a) where
+    rnf = rnf . Data.Set.toList
 
-instance DeepSeq a => DeepSeq (Data.Tree.Tree a) where
-    deepseq (Data.Tree.Node r f) = deepseq r `seq` deepseq f
+instance NFData a => NFData (Data.Tree.Tree a) where
+    rnf (Data.Tree.Node r f) = rnf r `seq` rnf f
 
-instance DeepSeq a => DeepSeq (Data.IntMap.IntMap a) where
-    deepseq = deepseq . Data.IntMap.toList
+instance NFData a => NFData (Data.IntMap.IntMap a) where
+    rnf = rnf . Data.IntMap.toList
 
-instance DeepSeq Data.IntSet.IntSet where
-    deepseq = deepseq . Data.IntSet.toList
+instance NFData Data.IntSet.IntSet where
+    rnf = rnf . Data.IntSet.toList
 
-instance DeepSeq a => DeepSeq [a] where
-    deepseq [] = ()
-    deepseq (x:xs) = deepseq x `seq` deepseq xs
+instance NFData a => NFData [a] where
+    rnf [] = ()
+    rnf (x:xs) = rnf x `seq` rnf xs
 
-instance (Ix a, DeepSeq a, DeepSeq b) => DeepSeq (Array a b) where
-    deepseq x = deepseq (bounds x, Data.Array.elems x)
+instance (Ix a, NFData a, NFData b) => NFData (Array a b) where
+    rnf x = rnf (bounds x, Data.Array.elems x)
 
-instance (DeepSeq a, DeepSeq b) => DeepSeq (a,b) where
-  deepseq (x,y) = deepseq x `seq` deepseq y
+instance (NFData a, NFData b) => NFData (a,b) where
+  rnf (x,y) = rnf x `seq` rnf y
 
-instance (DeepSeq a, DeepSeq b, DeepSeq c) => DeepSeq (a,b,c) where
-  deepseq (x,y,z) = deepseq x `seq` deepseq y `seq` deepseq z 
+instance (NFData a, NFData b, NFData c) => NFData (a,b,c) where
+  rnf (x,y,z) = rnf x `seq` rnf y `seq` rnf z 
 
-instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d) => DeepSeq (a,b,c,d) where
-  deepseq (x1,x2,x3,x4) = deepseq x1 `seq` 
-		        deepseq x2 `seq` 
-		        deepseq x3 `seq` 
-		        deepseq x4 
+instance (NFData a, NFData b, NFData c, NFData d) => NFData (a,b,c,d) where
+  rnf (x1,x2,x3,x4) = rnf x1 `seq` 
+		        rnf x2 `seq` 
+		        rnf x3 `seq` 
+		        rnf x4 
 
-instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5) => 
-         DeepSeq (a1, a2, a3, a4, a5) where
-  deepseq (x1, x2, x3, x4, x5) =
-                  deepseq x1 `seq`
-                  deepseq x2 `seq`
-                  deepseq x3 `seq`
-                  deepseq x4 `seq`
-                  deepseq x5
+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5) => 
+         NFData (a1, a2, a3, a4, a5) where
+  rnf (x1, x2, x3, x4, x5) =
+                  rnf x1 `seq`
+                  rnf x2 `seq`
+                  rnf x3 `seq`
+                  rnf x4 `seq`
+                  rnf x5
 
-instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6) => 
-         DeepSeq (a1, a2, a3, a4, a5, a6) where
-  deepseq (x1, x2, x3, x4, x5, x6) =
-                  deepseq x1 `seq`
-                  deepseq x2 `seq`
-                  deepseq x3 `seq`
-                  deepseq x4 `seq`
-                  deepseq x5 `seq`
-                  deepseq x6
+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6) => 
+         NFData (a1, a2, a3, a4, a5, a6) where
+  rnf (x1, x2, x3, x4, x5, x6) =
+                  rnf x1 `seq`
+                  rnf x2 `seq`
+                  rnf x3 `seq`
+                  rnf x4 `seq`
+                  rnf x5 `seq`
+                  rnf x6
 
-instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7) => 
-         DeepSeq (a1, a2, a3, a4, a5, a6, a7) where
-  deepseq (x1, x2, x3, x4, x5, x6, x7) =
-                  deepseq x1 `seq`
-                  deepseq x2 `seq`
-                  deepseq x3 `seq`
-                  deepseq x4 `seq`
-                  deepseq x5 `seq`
-                  deepseq x6 `seq`
-                  deepseq x7
+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7) => 
+         NFData (a1, a2, a3, a4, a5, a6, a7) where
+  rnf (x1, x2, x3, x4, x5, x6, x7) =
+                  rnf x1 `seq`
+                  rnf x2 `seq`
+                  rnf x3 `seq`
+                  rnf x4 `seq`
+                  rnf x5 `seq`
+                  rnf x6 `seq`
+                  rnf x7
 
-instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7, DeepSeq a8) => 
-         DeepSeq (a1, a2, a3, a4, a5, a6, a7, a8) where
-  deepseq (x1, x2, x3, x4, x5, x6, x7, x8) =
-                  deepseq x1 `seq`
-                  deepseq x2 `seq`
-                  deepseq x3 `seq`
-                  deepseq x4 `seq`
-                  deepseq x5 `seq`
-                  deepseq x6 `seq`
-                  deepseq x7 `seq`
-                  deepseq x8
+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7, NFData a8) => 
+         NFData (a1, a2, a3, a4, a5, a6, a7, a8) where
+  rnf (x1, x2, x3, x4, x5, x6, x7, x8) =
+                  rnf x1 `seq`
+                  rnf x2 `seq`
+                  rnf x3 `seq`
+                  rnf x4 `seq`
+                  rnf x5 `seq`
+                  rnf x6 `seq`
+                  rnf x7 `seq`
+                  rnf x8
 
-instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7, DeepSeq a8, DeepSeq a9) => 
-         DeepSeq (a1, a2, a3, a4, a5, a6, a7, a8, a9) where
-  deepseq (x1, x2, x3, x4, x5, x6, x7, x8, x9) =
-                  deepseq x1 `seq`
-                  deepseq x2 `seq`
-                  deepseq x3 `seq`
-                  deepseq x4 `seq`
-                  deepseq x5 `seq`
-                  deepseq x6 `seq`
-                  deepseq x7 `seq`
-                  deepseq x8 `seq`
-                  deepseq x9
+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7, NFData a8, NFData a9) => 
+         NFData (a1, a2, a3, a4, a5, a6, a7, a8, a9) where
+  rnf (x1, x2, x3, x4, x5, x6, x7, x8, x9) =
+                  rnf x1 `seq`
+                  rnf x2 `seq`
+                  rnf x3 `seq`
+                  rnf x4 `seq`
+                  rnf x5 `seq`
+                  rnf x6 `seq`
+                  rnf x7 `seq`
+                  rnf x8 `seq`
+                  rnf x9
diff --git a/deepseq.cabal b/deepseq.cabal
--- a/deepseq.cabal
+++ b/deepseq.cabal
@@ -1,5 +1,5 @@
 name:		deepseq
-version:	1.0.0.0
+version:	1.1.0.0
 license:	BSD3
 license-file:	LICENSE
 maintainer:	libraries@haskell.org
@@ -9,7 +9,11 @@
     This package provides a \"deep\" version of seq, for fully evluating
     data structures.
 build-type:     Simple
-cabal-version:  >=1.2
+cabal-version:  >=1.6
+
+source-repository head
+    type:     darcs
+    location: http://darcs.haskell.org/packages/deepseq/
 
 library {
   exposed-modules: Control.DeepSeq
