diff --git a/Numeric/AD/Halley.hs b/Numeric/AD/Halley.hs
--- a/Numeric/AD/Halley.hs
+++ b/Numeric/AD/Halley.hs
@@ -49,7 +49,7 @@
 --  > module Data.Complex
 --  > take 10 $ findZero ((+1).(^2)) (1 :+ 1)  -- converge to (0 :+ 1)@
 --
-findZero :: Fractional a => UU a -> a -> [a]
+findZero :: (Fractional a, Eq a) => UU a -> a -> [a]
 findZero f = go
     where
         go x = x : if y == 0 then [] else go (x - 2*y*y'/(2*y'*y'-y*y''))
@@ -64,7 +64,7 @@
 -- Note: the @take 10 $ inverse sqrt 1 (sqrt 10)@ example that works for Newton's method
 -- fails with Halley's method because the preconditions do not hold.
 
-inverse :: Fractional a => UU a -> a -> a -> [a]
+inverse :: (Fractional a, Eq a) => UU a -> a -> a -> [a]
 inverse f x0 y = findZero (\x -> f x - lift y) x0
 {-# INLINE inverse  #-}
 
@@ -73,7 +73,7 @@
 -- increasingly accurate results.  (Modulo the usual caveats.)
 -- 
 -- > take 10 $ fixedPoint cos 1 -- converges to 0.7390851332151607
-fixedPoint :: Fractional a => UU a -> a -> [a]
+fixedPoint :: (Fractional a, Eq a) => UU a -> a -> [a]
 fixedPoint f = findZero (\x -> f x - x)
 {-# INLINE fixedPoint #-}
 
@@ -82,7 +82,7 @@
 -- accurate results.  (Modulo the usual caveats.)
 --
 -- > take 10 $ extremum cos 1 -- convert to 0 
-extremum :: Fractional a => UU a -> a -> [a]
+extremum :: (Fractional a, Eq a) => UU a -> a -> [a]
 extremum f = findZero (diff (decomposeMode . f . composeMode))
 {-# INLINE extremum #-}
 
diff --git a/Numeric/AD/Internal/Classes.hs b/Numeric/AD/Internal/Classes.hs
--- a/Numeric/AD/Internal/Classes.hs
+++ b/Numeric/AD/Internal/Classes.hs
@@ -44,7 +44,7 @@
     osi = id
 
 class Lifted t where
-    showsPrec1          :: Num a => Int -> t a -> ShowS
+    showsPrec1          :: (Num a, Show a) => Int -> t a -> ShowS
     (==!)               :: (Num a, Eq a) => t a -> t a -> Bool
     compare1            :: (Num a, Ord a) => t a -> t a -> Ordering
     fromInteger1        :: Num a => Integer -> t a
diff --git a/Numeric/AD/Internal/Composition.hs b/Numeric/AD/Internal/Composition.hs
--- a/Numeric/AD/Internal/Composition.hs
+++ b/Numeric/AD/Internal/Composition.hs
@@ -20,7 +20,7 @@
 
 import Control.Applicative
 import Data.Data (Data(..), mkDataType, DataType, mkConstr, Constr, constrIndex, Fixity(..))
-import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon, mkTyConApp, typeOfDefault, gcast1)
+import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon3, mkTyConApp, typeOfDefault, gcast1)
 import Data.Foldable (Foldable(foldMap))
 import Data.Traversable (Traversable(traverse))
 import Numeric.AD.Internal.Classes
@@ -46,7 +46,7 @@
               ga = undefined
 
 composeFunctorTyCon :: TyCon
-composeFunctorTyCon = mkTyCon "Numeric.AD.Internal.Composition.ComposeFunctor"
+composeFunctorTyCon = mkTyCon3 "ad" "Numeric.AD.Internal.Composition" "ComposeFunctor"
 {-# NOINLINE composeFunctorTyCon #-}
 
 composeFunctorConstr :: Constr
@@ -160,7 +160,7 @@
     typeOf = typeOfDefault
     
 composeModeTyCon :: TyCon
-composeModeTyCon = mkTyCon "Numeric.AD.Internal.Composition.ComposeMode"
+composeModeTyCon = mkTyCon3 "ad" "Numeric.AD.Internal.Composition" "ComposeMode"
 {-# NOINLINE composeModeTyCon #-}
 
 composeModeConstr :: Constr
diff --git a/Numeric/AD/Internal/Types.hs b/Numeric/AD/Internal/Types.hs
--- a/Numeric/AD/Internal/Types.hs
+++ b/Numeric/AD/Internal/Types.hs
@@ -16,7 +16,7 @@
     ) where
 
 import Data.Data (Data(..), mkDataType, DataType, mkConstr, Constr, constrIndex, Fixity(..))
-import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon, mkTyConApp, gcast1)
+import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon3, mkTyConApp, gcast1)
 import Language.Haskell.TH
 import Numeric.AD.Internal.Classes
 
@@ -48,7 +48,7 @@
               asArgsType = const
 
 adTyCon :: TyCon
-adTyCon = mkTyCon "Numeric.AD.Internal.Types.AD"
+adTyCon = mkTyCon3 "ad" "Numeric.AD.Internal.Types" "AD"
 {-# NOINLINE adTyCon #-}
 
 adConstr :: Constr
diff --git a/Numeric/AD/Newton.hs b/Numeric/AD/Newton.hs
--- a/Numeric/AD/Newton.hs
+++ b/Numeric/AD/Newton.hs
@@ -46,7 +46,7 @@
 --  > module Data.Complex
 --  > take 10 $ findZero ((+1).(^2)) (1 :+ 1)  -- converge to (0 :+ 1)@
 --
-findZero :: Fractional a => UU a -> a -> [a]
+findZero :: (Fractional a, Eq a) => UU a -> a -> [a]
 findZero f = go
     where
         go x = x : if y == 0 then [] else go (x - y/y') 
@@ -62,7 +62,7 @@
 --
 -- > take 10 $ inverseNewton sqrt 1 (sqrt 10)  -- converges to 10
 --
-inverse :: Fractional a => UU a -> a -> a -> [a]
+inverse :: (Fractional a, Eq a) => UU a -> a -> a -> [a]
 inverse f x0 y = findZero (\x -> f x - lift y) x0
 {-# INLINE inverse  #-}
 
@@ -71,7 +71,7 @@
 -- increasingly accurate results.  (Modulo the usual caveats.)
 -- 
 -- > take 10 $ fixedPoint cos 1 -- converges to 0.7390851332151607
-fixedPoint :: Fractional a => UU a -> a -> [a]
+fixedPoint :: (Fractional a, Eq a) => UU a -> a -> [a]
 fixedPoint f = findZero (\x -> f x - x)
 {-# INLINE fixedPoint #-}
 
@@ -80,7 +80,7 @@
 -- accurate results.  (Modulo the usual caveats.)
 --
 -- > take 10 $ extremum cos 1 -- convert to 0 
-extremum :: Fractional a => UU a -> a -> [a]
+extremum :: (Fractional a, Eq a) => UU a -> a -> [a]
 extremum f = findZero (diff (decomposeMode . f . composeMode))
 {-# INLINE extremum #-}
 
diff --git a/ad.cabal b/ad.cabal
--- a/ad.cabal
+++ b/ad.cabal
@@ -1,5 +1,5 @@
 name:         ad
-version:      1.2.0.2
+version:      1.3
 license:      BSD3
 license-File: LICENSE
 copyright:    (c) Edward Kmett 2010-2011,
@@ -14,10 +14,10 @@
 extra-source-files: TODO
 synopsis:     Automatic Differentiation
 
-description:  
+description:
     Forward-, reverse- and mixed- mode automatic differentiation combinators with a common API.
-    . 
-    Type-level \"branding\" is used to both prevent the end user from confusing infinitesimals 
+    .
+    Type-level \"branding\" is used to both prevent the end user from confusing infinitesimals
     and to limit unsafe access to the implementation details of each Mode.
     .
     Each mode has a separate module full of combinators.
@@ -32,8 +32,8 @@
     .
     * @Numeric.AD.Mode.Mixed@ computes using whichever mode or combination thereof is suitable to each individual combinator. This mode is the default, re-exported by @Numeric.AD@
     .
-    . 
-    While not every mode can provide all operations, the following basic operations are supported, modified as 
+    .
+    While not every mode can provide all operations, the following basic operations are supported, modified as
     appropriate by the suffixes below:
     .
     * 'grad' computes the gradient (partial derivatives) of a function at a point.
@@ -60,6 +60,10 @@
     .
     * @0@ means that the resulting derivative list is padded with 0s at the end.
     .
+    Changes since 1.2
+    .
+    * Compiles with template haskell 2.6, changed interface to comply with the lack of Eq and Show as superclasses of Num in the new GHC.
+    .
     Changes since 1.1.3
     .
     * Made primal calculations strict where possible.
@@ -73,7 +77,7 @@
     Changes since 1.0.0
     .
     * Changed the way 'Show' was derived to comply with changes in instance resolution in ghc >= 7.0 && <= 7.1
-    . 
+    .
     Changes since 0.45.0
     .
     * Converted 'Stream' to use the external 'comonad' package
@@ -103,11 +107,7 @@
   type: git
   location: git://github.com/ekmett/ad.git
 
-flag TemplateHaskell24
-  manual: False
-  default: False
-
-library 
+library
   extensions: CPP
 
   other-extensions:
@@ -126,47 +126,42 @@
     TypeOperators
     UndecidableInstances
 
-  if flag(TemplateHaskell24)
-    build-depends: template-haskell >= 2.4 && < 2.5
-    cpp-options: -DOldClassI
-  else 
-    build-depends: template-haskell >= 2.5 && < 2.6
-  
-  build-depends:       
+  build-depends:
     base       >= 4     && < 5,
-    data-reify >= 0.6   && < 0.7, 
+    data-reify >= 0.6   && < 0.7,
     containers >= 0.2   && < 0.5,
     array      >= 0.2   && < 0.4,
     comonad    >= 1.1.1 && < 1.2,
-    free       >= 2.0   && < 2.1
-  
+    free       >= 2.0   && < 2.1,
+    template-haskell >= 2.6 && < 2.7
+
   exposed-modules:
     Numeric.AD
     Numeric.AD.Classes
     Numeric.AD.Types
     Numeric.AD.Newton
     Numeric.AD.Halley
-  
+
     Numeric.AD.Internal.Classes
     Numeric.AD.Internal.Combinators
-  
+
     Numeric.AD.Internal.Forward
     Numeric.AD.Internal.Tower
     Numeric.AD.Internal.Reverse
     Numeric.AD.Internal.Sparse
     Numeric.AD.Internal.Dense
     Numeric.AD.Internal.Composition
-  
+
     Numeric.AD.Mode.Directed
     Numeric.AD.Mode.Forward
     Numeric.AD.Mode.Mixed
     Numeric.AD.Mode.Reverse
     Numeric.AD.Mode.Tower
     Numeric.AD.Mode.Sparse
-  
+
   other-modules:
     Numeric.AD.Internal.Types
     Numeric.AD.Internal.Tensors
     Numeric.AD.Internal.Identity
-  
+
   ghc-options: -Wall -fspec-constr -fdicts-cheap -O2
