diff --git a/data-fix.cabal b/data-fix.cabal
--- a/data-fix.cabal
+++ b/data-fix.cabal
@@ -1,6 +1,6 @@
 Name:            data-fix
-Version:         0.0.4
-Cabal-Version:   >= 1.6
+Version:         0.0.6
+Cabal-Version:   >= 1.10
 License:         BSD3
 License-file:    LICENSE
 Author:          Anton Kholomiov
@@ -8,11 +8,11 @@
 Category:        Data
 Synopsis:        Fixpoint data types
 Build-Type:      Simple
-Description:     
+Description:
   Fixpoint types and recursion schemes. If you define your AST as
   fixpoint type, you get fold and unfold operations for free.
   .
-  Thanks for contribution to: Matej Kollar
+  Thanks for contribution to: Matej Kollar, Herbert Valerio Riedel
 
 Stability:       Experimental
 
@@ -24,10 +24,11 @@
     Location: https://github.com/anton-k/data-fix
 
 Library
-  Build-depends: base >= 4, base < 5
+  Default-Language: Haskell2010
+  Build-depends: base >= 4.7, base < 5
   Hs-source-dirs: src/
 
   ghc-options: -Wall
 
-  Exposed-modules: 
+  Exposed-modules:
       Data.Fix
diff --git a/src/Data/Fix.hs b/src/Data/Fix.hs
--- a/src/Data/Fix.hs
+++ b/src/Data/Fix.hs
@@ -4,6 +4,7 @@
         TypeSynonymInstances,
         DeriveGeneric,
         DeriveDataTypeable,
+        CPP,
         StandaloneDeriving #-}
 -- | Fix-point type. It allows to define generic recurion schemes.
 --
@@ -59,13 +60,28 @@
 import Data.Data
 import Data.Function (on)
 import Data.Traversable
+#if MIN_VERSION_base(4,9,0)
+import Data.Functor.Classes
+#endif
 
 -- | A fix-point type.
 newtype Fix f = Fix { unFix :: f (Fix f) } deriving (Generic, Typeable)
 deriving instance (Typeable f, Data (f (Fix f))) => Data (Fix f)
 
 -- standard instances
-
+#if MIN_VERSION_base(4,9,0)
+instance Eq1 f => Eq (Fix f) where
+    Fix f == Fix g = eq1 f g
+instance Ord1 f => Ord (Fix f) where
+    compare (Fix f) (Fix g) = compare1 f g
+instance Show1 f => Show (Fix f) where
+    showsPrec n (Fix f) = showParen (n > 10)
+        $ showString "Fix "
+        . showsPrec1 11 f
+instance Read1 f => Read (Fix f) where
+    readsPrec d = readParen (d > 10) $ \r ->
+        [(Fix m, t) | ("Fix", s) <- lex r, (m, t) <- readsPrec1 11 s]
+#else
 instance Show (f (Fix f)) => Show (Fix f) where
     showsPrec n x = showParen (n > 10) $ \s ->
         "Fix " ++ showsPrec 11 (unFix x) s
@@ -79,6 +95,7 @@
 
 instance Ord (f (Fix f)) => Ord (Fix f) where
     compare = compare `on` unFix
+#endif
 
 
 -- recursion
