diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+2022-10-12 Ivan Perez <ivan.perez@keera.co.uk>
+        * Version bump (0.2) (#19).
+        * Move type constraints to default methods (#17).
+        * Enable compilation with GHC 8.6-9.0 (#18).
+
 2020-04-28 Ivan Perez <ivan.perez@keera.co.uk>
         * Document combination with other vector libraries (#13), by @walseb.
         * Remove unnecessary GHC extension (#10), by @turion.
diff --git a/simple-affine-space.cabal b/simple-affine-space.cabal
--- a/simple-affine-space.cabal
+++ b/simple-affine-space.cabal
@@ -1,6 +1,6 @@
 name: simple-affine-space
-version: 0.1.1
-cabal-version: >= 1.8
+version: 0.2
+cabal-version: >= 1.10
 license: BSD3
 license-file: LICENSE
 author: Henrik Nilsson, Antony Courtney
@@ -45,10 +45,17 @@
     Data.Vector3
     Data.VectorSpace
 
+  default-language:
+    Haskell2010
+
 test-suite hlint
   type: exitcode-stdio-1.0
   main-is: hlint.hs
   hs-source-dirs: tests
+
+  default-language:
+    Haskell2010
+
   if !flag(test-hlint)
     buildable: False
   else
@@ -62,6 +69,9 @@
   main-is: HaddockCoverage.hs
   ghc-options: -Wall
   hs-source-dirs: tests
+
+  default-language:
+    Haskell2010
 
   if !flag(test-doc-coverage)
     buildable: False
diff --git a/src/Data/VectorSpace.hs b/src/Data/VectorSpace.hs
--- a/src/Data/VectorSpace.hs
+++ b/src/Data/VectorSpace.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE FunctionalDependencies, FlexibleInstances #-}
+{-# LANGUAGE DefaultSignatures #-}
 -----------------------------------------------------------------------------------------
 -- |
 -- Module      :  Data.VectorSpace
@@ -56,7 +57,7 @@
 --   The encoding uses a type class |VectorSpace| @v a@, where @v@ represents
 --   the type of the vectors and @a@ represents the types of the scalars.
 
-class (Eq a, Floating a) => VectorSpace v a | v -> a where
+class VectorSpace v a | v -> a where
     -- | Vector with no magnitude (unit for addition).
     zeroVector :: v
 
@@ -65,6 +66,7 @@
 
     -- | Division by a scalar.
     (^/) :: v -> a -> v
+    default (^/) :: Fractional a => v -> a -> v
     v ^/ a = (1/a) *^ v
 
     -- | Vector addition
@@ -77,6 +79,7 @@
     -- | Vector negation. Addition with a negated vector should be
     --   same as subtraction.
     negateVector :: v -> v
+    default negateVector :: Num a => v -> v
     negateVector v = (-1) *^ v
 
     -- | Dot product (also known as scalar or inner product).
@@ -95,11 +98,13 @@
     -- For a vector represented mathematically as @a = a1,a2,...,an@, the norm
     -- is the square root of @a1^2 + a2^2 + ... + an^2@.
     norm :: v -> a
+    default norm :: Floating a => v -> a
     norm v = sqrt (v `dot` v)
 
     -- | Return a vector with the same origin and orientation (angle), but such
     -- that the norm is one (the unit for multiplication by a scalar).
     normalize    :: v -> v
+    default normalize :: (Eq a, Floating a) => v -> v
     normalize v = if nv /= 0 then v ^/ nv else error "normalize: zero vector"
         where nv = norm v
 
