diff --git a/NumInstances.cabal b/NumInstances.cabal
--- a/NumInstances.cabal
+++ b/NumInstances.cabal
@@ -1,5 +1,5 @@
 Name:                NumInstances
-Version:             1.2
+Version:             1.3
 Synopsis:            Instances of numeric classes for functions and tuples
 Description:         Instances of numeric classes for functions and tuples.
                      Import "Data.NumInstances" to get all the instances.
@@ -11,14 +11,25 @@
 Maintainer:          conal@conal.net
 Category:            Data
 Build-type:          Simple
-Cabal-version:       >=1.2
-Package-Url:         http://github.com/conal/NumInstances
+Cabal-version:       >=1.8
+Homepage:            https://github.com/conal/NumInstances
+Extra-Source-Files:  src-draconian-Num/Data/NumInstances/PreRequisites.hs,
+                     src-relaxed-Num/Data/NumInstances/PreRequisites.hs
 
+Source-Repository head
+  type:     git
+  location: git://github.com/conal/NumInstances.git
+
 Library
   hs-Source-Dirs:      src
   Exposed-modules:     Data.NumInstances, Data.NumInstances.Function, Data.NumInstances.Tuple
   Build-Depends:       base<5
-  Other-modules:       Data.NumInstances.Util
+  Other-modules:       Data.NumInstances.Util, Data.NumInstances.PreRequisites
+
+  if impl(ghc < 7.4)
+    hs-Source-Dirs:    src-draconian-Num
+  else
+    hs-Source-Dirs:    src-relaxed-Num
 
 -- This module used to be part of vector-space
 
diff --git a/src-draconian-Num/Data/NumInstances/PreRequisites.hs b/src-draconian-Num/Data/NumInstances/PreRequisites.hs
new file mode 100644
--- /dev/null
+++ b/src-draconian-Num/Data/NumInstances/PreRequisites.hs
@@ -0,0 +1,22 @@
+module Data.NumInstances.PreRequisites where
+
+import Control.Applicative
+
+import Data.NumInstances.Util
+
+noFun :: String -> a
+noFun = noOv "function"
+
+-- Eq & Show are prerequisites for Num, so they need to be faked here
+instance Eq (a->b) where
+  (==) = noFun "(==)"
+  (/=) = noFun "(/=)"
+
+instance Ord b => Ord (a->b) where
+  min = liftA2 min
+  max = liftA2 max
+
+instance Show (a->b) where
+  show      = noFun "show"
+  showsPrec = noFun "showsPrec"
+  showList  = noFun "showList"
diff --git a/src-relaxed-Num/Data/NumInstances/PreRequisites.hs b/src-relaxed-Num/Data/NumInstances/PreRequisites.hs
new file mode 100644
--- /dev/null
+++ b/src-relaxed-Num/Data/NumInstances/PreRequisites.hs
@@ -0,0 +1,3 @@
+module Data.NumInstances.PreRequisites where
+
+-- no prerequsites!
diff --git a/src/Data/NumInstances/Function.hs b/src/Data/NumInstances/Function.hs
--- a/src/Data/NumInstances/Function.hs
+++ b/src/Data/NumInstances/Function.hs
@@ -15,24 +15,7 @@
 
 import Control.Applicative
 
-import Data.NumInstances.Util
-
-noFun :: String -> a
-noFun = noOv "function"
-
--- Eq & Show are prerequisites for Num, so they need to be faked here
-instance Eq (a->b) where
-  (==) = noFun "(==)"
-  (/=) = noFun "(/=)"
-
-instance Ord b => Ord (a->b) where
-  min = liftA2 min
-  max = liftA2 max
-
-instance Show (a->b) where
-  show      = noFun "show"
-  showsPrec = noFun "showsPrec"
-  showList  = noFun "showList"
+import Data.NumInstances.PreRequisites () -- Eq, Ord, Show, if necessary
 
 instance Num b => Num (a->b) where
   negate      = fmap negate
