diff --git a/Numeric/AD/Internal/Dense.hs b/Numeric/AD/Internal/Dense.hs
--- a/Numeric/AD/Internal/Dense.hs
+++ b/Numeric/AD/Internal/Dense.hs
@@ -42,8 +42,8 @@
 import Numeric.AD.Internal.Identity
 
 data Dense f a
-    = Lift a
-    | Dense a (f a)
+    = Lift !a
+    | Dense !a (f a)
 
 instance Show a => Show (Dense f a) where
     showsPrec n (Lift a) = showsPrec n a
diff --git a/Numeric/AD/Internal/Forward.hs b/Numeric/AD/Internal/Forward.hs
--- a/Numeric/AD/Internal/Forward.hs
+++ b/Numeric/AD/Internal/Forward.hs
@@ -37,7 +37,7 @@
 import Numeric.AD.Internal.Classes
 import Numeric.AD.Internal.Identity
 
-data Forward a = Forward a a deriving (Show, Data, Typeable)
+data Forward a = Forward !a a deriving (Show, Data, Typeable)
 
 tangent :: AD Forward a -> a
 tangent (AD (Forward _ da)) = da
diff --git a/Numeric/AD/Internal/Reverse.hs b/Numeric/AD/Internal/Reverse.hs
--- a/Numeric/AD/Internal/Reverse.hs
+++ b/Numeric/AD/Internal/Reverse.hs
@@ -60,10 +60,10 @@
 
 -- | A @Tape@ records the information needed back propagate from the output to each input during 'Reverse' 'Mode' AD.
 data Tape a t
-    = Lift a
-    | Var a {-# UNPACK #-} !Int
-    | Binary a a a t t
-    | Unary a a t
+    = Lift !a
+    | Var !a {-# UNPACK #-} !Int
+    | Binary !a a a t t
+    | Unary !a a t
     deriving (Show, Data, Typeable)
 
 -- | @Reverse@ is a 'Mode' using reverse-mode automatic differentiation that provides fast 'diffFU', 'diff2FU', 'grad', 'grad2' and a fast 'jacobian' when you have a significantly smaller number of outputs than inputs.
diff --git a/Numeric/AD/Internal/Sparse.hs b/Numeric/AD/Internal/Sparse.hs
--- a/Numeric/AD/Internal/Sparse.hs
+++ b/Numeric/AD/Internal/Sparse.hs
@@ -49,7 +49,7 @@
 -- which it was found. This should be key for efficiently computing sparse hessians.
 -- there are only (n + k - 1) choose k distinct nth partial derivatives of a 
 -- function with k inputs.
-data Sparse a = Sparse a (IntMap (Sparse a)) deriving (Show, Data, Typeable)
+data Sparse a = Sparse !a (IntMap (Sparse a)) deriving (Show, Data, Typeable)
 
 -- | drop keys below a given value
 dropMap :: Int -> IntMap a -> IntMap a
diff --git a/ad.cabal b/ad.cabal
--- a/ad.cabal
+++ b/ad.cabal
@@ -1,5 +1,5 @@
 name:         ad
-version:      1.1.3
+version:      1.2.0
 license:      BSD3
 license-File: LICENSE
 copyright:    (c) Edward Kmett 2010-2011,
