diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,13 @@
+0.3.11
+
+Author: Timo von Holtz <tvh@anchor.com.au>
+
+* Add some Instances for Function
+
+Author: Antoine Latter <aslatter@gmail.com>
+
+* Allow building against QuickCheck 2.8.
+
 0.3.10
 
 Author: Antoine Latter <aslatter@gmail.com>
diff --git a/quickcheck-instances.cabal b/quickcheck-instances.cabal
--- a/quickcheck-instances.cabal
+++ b/quickcheck-instances.cabal
@@ -1,5 +1,5 @@
 Name:                quickcheck-instances
-Version:             0.3.10
+Version:             0.3.11
 Synopsis:            Common quickcheck instances
 Description:         QuickCheck instances.
                      .
@@ -43,7 +43,7 @@
                        hashable >= 1.1.2.3 && < 1.3,
                        unordered-containers >= 0.2.1 && < 0.3,
                        old-time >= 1.0 && < 1.2,
-                       QuickCheck >= 2.1 && < 2.8,
+                       QuickCheck >= 2.1 && < 2.9,
                        text >= 0.7 && < 1.3,
                        time >= 1.1 && < 1.6
 
diff --git a/src/Test/QuickCheck/Instances.hs b/src/Test/QuickCheck/Instances.hs
--- a/src/Test/QuickCheck/Instances.hs
+++ b/src/Test/QuickCheck/Instances.hs
@@ -28,10 +28,13 @@
 module Test.QuickCheck.Instances () where
 
 import Control.Applicative
+import Control.Arrow
 import Data.Foldable (toList)
 import Data.Int (Int32)
 import Data.Hashable
+import Data.Ratio
 import Test.QuickCheck
+import Test.QuickCheck.Function
 
 import qualified Data.Array.IArray as Array
 import qualified Data.Array.Unboxed as Array
@@ -122,6 +125,12 @@
 instance CoArbitrary TL.Text where
     coarbitrary = coarbitrary . TL.unpack
 
+instance Function TS.Text where
+    function = functionMap TS.unpack TS.pack
+
+instance Function TL.Text where
+    function = functionMap TL.unpack TL.pack
+
 -- Containers
 instance Arbitrary a => Arbitrary (IntMap.IntMap a) where
     arbitrary = IntMap.fromList <$> arbitrary
@@ -158,6 +167,9 @@
 instance CoArbitrary a => CoArbitrary (Set.Set a) where
     coarbitrary = coarbitrary . Set.toList
 
+instance (Ord a, Function a) => Function (Set.Set a) where
+    function = functionMap Set.toList Set.fromList
+
 instance (Hashable a, Eq a, Arbitrary a) => Arbitrary (HS.HashSet a) where
     arbitrary = HS.fromList <$> arbitrary
     shrink hashset = HS.fromList <$> shrink (HS.toList hashset)
@@ -268,6 +280,9 @@
 instance CoArbitrary Time.Day where
     coarbitrary = coarbitrary . Time.toModifiedJulianDay
 
+instance Function Time.Day where
+    function = functionMap Time.toModifiedJulianDay Time.ModifiedJulianDay
+
 instance Arbitrary Time.UniversalTime where
     arbitrary = Time.ModJulianDate <$> (2000 +) <$> arbitrary
     shrink    = (Time.ModJulianDate <$>) . shrink . Time.getModJulianDate
@@ -286,6 +301,9 @@
 instance CoArbitrary Time.DiffTime where
     coarbitrary = coarbitraryReal
 
+instance Function Time.DiffTime where
+    function = functionMap toRational fromRational
+
 instance Arbitrary Time.UTCTime where
     arbitrary =
         Time.UTCTime
@@ -299,6 +317,10 @@
     coarbitrary (Time.UTCTime day dayTime) =
         coarbitrary day >< coarbitrary dayTime
 
+instance Function Time.UTCTime where
+    function = functionMap (\(Time.UTCTime day dt) -> (day,dt))
+                           (uncurry Time.UTCTime)
+
 instance Arbitrary Time.NominalDiffTime where
     arbitrary = arbitrarySizedFractional
     shrink    = shrinkRealFrac
@@ -402,4 +424,9 @@
 
 coarbitraryEnum :: Enum a => a -> Gen c -> Gen c
 coarbitraryEnum = variant . fromEnum
+#endif
+
+#if !(MIN_VERSION_QuickCheck(2,8,0))
+instance (Function a, Integral a) => Function (Ratio a) where
+    function = functionMap (numerator &&& denominator) (uncurry (%))
 #endif
