diff --git a/src/Data/AdditiveGroup.hs b/src/Data/AdditiveGroup.hs
--- a/src/Data/AdditiveGroup.hs
+++ b/src/Data/AdditiveGroup.hs
@@ -23,6 +23,7 @@
 import Data.Monoid (Monoid(..))
 import Data.Foldable (Foldable,foldr)
 import Data.Complex hiding (magnitude)
+import Data.Ratio
 
 import Data.MemoTrie
 
@@ -58,7 +59,8 @@
 instance AdditiveGroup Integer where {zeroV=0; (^+^) = (+); negateV = negate}
 instance AdditiveGroup Float   where {zeroV=0; (^+^) = (+); negateV = negate}
 instance AdditiveGroup Double  where {zeroV=0; (^+^) = (+); negateV = negate}
-
+instance Integral a => AdditiveGroup (Ratio a) where
+  {zeroV=0; (^+^) = (+); negateV = negate}
 
 instance (RealFloat v, AdditiveGroup v) => AdditiveGroup (Complex v) where
   zeroV   = zeroV :+ zeroV
diff --git a/src/Data/AffineSpace.hs b/src/Data/AffineSpace.hs
--- a/src/Data/AffineSpace.hs
+++ b/src/Data/AffineSpace.hs
@@ -17,6 +17,7 @@
   ) where
 
 import Control.Applicative (liftA2)
+import Data.Ratio
 
 import Data.VectorSpace
 
@@ -65,6 +66,10 @@
   (.-.) =  (-)
   (.+^) =  (+)
 
+instance Integral a => AffineSpace (Ratio a) where
+  type Diff (Ratio a) = Ratio a
+  (.-.) = (-)
+  (.+^) = (+)
 
 instance (AffineSpace p, AffineSpace q) => AffineSpace (p,q) where
   type Diff (p,q)   = (Diff p, Diff q)
diff --git a/src/Data/Basis.hs b/src/Data/Basis.hs
--- a/src/Data/Basis.hs
+++ b/src/Data/Basis.hs
@@ -23,6 +23,7 @@
 
 -- import Control.Applicative ((<$>))
 import Control.Arrow (first)
+import Data.Ratio
 -- import Data.Either
 
 import Data.VectorSpace
@@ -72,6 +73,12 @@
   basisValue ()     = 1
   decompose s       = [((),s)]
   decompose' s      = const s
+
+instance Integral a => HasBasis (Ratio a) where
+  type Basis (Ratio a) = ()
+  basisValue ()        = 1
+  decompose s          = [((),s)]
+  decompose' s         = const s
 
 instance ( HasBasis u, s ~ Scalar u
          , HasBasis v, s ~ Scalar v )
diff --git a/src/Data/VectorSpace.hs b/src/Data/VectorSpace.hs
--- a/src/Data/VectorSpace.hs
+++ b/src/Data/VectorSpace.hs
@@ -32,6 +32,7 @@
 
 import Control.Applicative (liftA2)
 import Data.Complex hiding (magnitude)
+import Data.Ratio
 
 import Data.AdditiveGroup
 import Data.MemoTrie
@@ -96,6 +97,11 @@
   type Scalar Float = Float
   (*^)  = (*)
 instance InnerSpace  Float  where (<.>) = (*)
+
+instance Integral a => VectorSpace (Ratio a) where
+  type Scalar (Ratio a) = Ratio a
+  (*^) = (*)
+instance Integral a => InnerSpace  (Ratio a) where (<.>) = (*)
 
 instance (RealFloat v, VectorSpace v) => VectorSpace (Complex v) where
   type Scalar (Complex v) = Scalar v
diff --git a/vector-space.cabal b/vector-space.cabal
--- a/vector-space.cabal
+++ b/vector-space.cabal
@@ -1,5 +1,5 @@
 Name:                vector-space
-Version:             0.7.8
+Version:             0.8.0
 Cabal-Version:       >= 1.2
 Synopsis:            Vector & affine spaces, linear maps, and derivatives
 Category:            math
