diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,37 @@
-language: haskell
-before_install:
-  # Uncomment whenever hackage is down.
-  # - mkdir -p ~/.cabal && cp travis/config ~/.cabal/config && cabal update
+env:
+ - GHCVER=7.4.2 CABALVER=1.16
+ - GHCVER=7.6.3 CABALVER=1.16
+ - GHCVER=7.8.4 CABALVER=1.18
+ - GHCVER=7.10.1 CABALVER=1.22
+ - GHCVER=head CABALVER=1.22
 
-  # Try installing some of the build-deps with apt-get for speed.
-  - travis/cabal-apt-install $mode
+matrix:
+  allow_failures:
+   - env: GHCVER=head CABALVER=1.22
 
+before_install:
+ - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
+ - travis_retry sudo apt-get update
+ - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER
+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+ - cabal --version
+
 install:
-  - cabal configure $mode
-  - cabal build
+ - travis_retry cabal update
+ - cabal install --enable-tests --only-dependencies
 
 script:
-  - $script
-  - hlint src --cpp-define HLINT
+ - cabal configure -v2 --enable-tests
+ - cabal build
+ - cabal sdist
+ - export SRC_TGZ=$(cabal info . | awk '{print $2 ".tar.gz";exit}') ;
+   cd dist/;
+   if [ -f "$SRC_TGZ" ]; then
+      cabal install "$SRC_TGZ";
+   else
+      echo "expected '$SRC_TGZ' not found";
+      exit 1;
+   fi
 
 notifications:
   irc:
@@ -20,7 +39,4 @@
       - "irc.freenode.org#haskell-lens"
     skip_join: true
     template:
-      - "\x0313linear\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
-
-env:
-  - mode="--enable-tests" script="cabal test"
+      - "\x0313linear\x0f/\x0306%{branch}\x0f \x0314%{commit}\x0f %{message} \x0302\x1f%{build_url}\x0f"
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,12 @@
+1.18.3
+------
+* Compile warning-free on GHC 7.10.
+
+
+1.18.2
+------
+* Added `NFData` instance for `Point`
+
 1.18.1
 ------
 * Added an `-f-template-haskell` option to allow disabling `template-haskell` support. This is an unsupported configuration but may be useful for expert users in sandbox configurations.
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2011-14 Edward Kmett
+Copyright 2011-2015 Edward Kmett
 
 All rights reserved.
 
diff --git a/linear.cabal b/linear.cabal
--- a/linear.cabal
+++ b/linear.cabal
@@ -1,6 +1,6 @@
 name:          linear
 category:      Math, Algebra
-version:       1.18.1.1
+version:       1.18.3
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -9,7 +9,7 @@
 stability:     provisional
 homepage:      http://github.com/ekmett/linear/
 bug-reports:   http://github.com/ekmett/linear/issues
-copyright:     Copyright (C) 2012-2014 Edward A. Kmett
+copyright:     Copyright (C) 2012-2015 Edward A. Kmett
 synopsis:      Linear Algebra
 description:   Types and combinators for linear algebra on free vector spaces
 build-type:    Custom
diff --git a/src/Linear.hs b/src/Linear.hs
--- a/src/Linear.hs
+++ b/src/Linear.hs
@@ -1,6 +1,6 @@
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/Affine.hs b/src/Linear/Affine.hs
--- a/src/Linear/Affine.hs
+++ b/src/Linear/Affine.hs
@@ -28,6 +28,7 @@
 module Linear.Affine where
 
 import Control.Applicative
+import Control.DeepSeq
 import Control.Monad (liftM)
 import Control.Lens
 import Data.Binary as Binary
@@ -145,6 +146,8 @@
 #endif
            )
 
+instance NFData (f a) => NFData (Point f a) where
+  rnf (P x) = rnf x
 
 instance Serial1 f => Serial1 (Point f) where
   serializeWith f (P p) = serializeWith f p
diff --git a/src/Linear/Algebra.hs b/src/Linear/Algebra.hs
--- a/src/Linear/Algebra.hs
+++ b/src/Linear/Algebra.hs
@@ -1,6 +1,14 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+-----------------------------------------------------------------------------
+-- |
+-- License     :  BSD-style (see the file LICENSE)
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-----------------------------------------------------------------------------
 module Linear.Algebra
   ( Algebra(..)
   , Coalgebra(..)
diff --git a/src/Linear/Binary.hs b/src/Linear/Binary.hs
--- a/src/Linear/Binary.hs
+++ b/src/Linear/Binary.hs
@@ -1,6 +1,7 @@
+{-# LANGUAGE CPP #-}
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2013-2014 Edward Kmett and Anthony Cowley
+-- Copyright   :  (C) 2013-2015 Edward Kmett and Anthony Cowley
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -15,10 +16,16 @@
   , getLinear
   ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
 import Data.Binary
+#if __GLASGOW_HASKELL__ < 710
 import Data.Foldable (Foldable, traverse_)
 import Data.Traversable (Traversable, sequenceA)
+#else
+import Data.Foldable (traverse_)
+#endif
 
 -- | Serialize a linear type.
 putLinear :: (Binary a, Foldable t) => t a -> Put
diff --git a/src/Linear/Conjugate.hs b/src/Linear/Conjugate.hs
--- a/src/Linear/Conjugate.hs
+++ b/src/Linear/Conjugate.hs
@@ -2,7 +2,7 @@
 {-# LANGUAGE DefaultSignatures #-}
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/Covector.hs b/src/Linear/Covector.hs
--- a/src/Linear/Covector.hs
+++ b/src/Linear/Covector.hs
@@ -1,4 +1,13 @@
 {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-}
+-----------------------------------------------------------------------------
+-- |
+-- License     :  BSD-style (see the file LICENSE)
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- Operations on affine spaces.
+-----------------------------------------------------------------------------
 module Linear.Covector
   ( Covector(..)
   , ($*)
diff --git a/src/Linear/Epsilon.hs b/src/Linear/Epsilon.hs
--- a/src/Linear/Epsilon.hs
+++ b/src/Linear/Epsilon.hs
@@ -1,6 +1,6 @@
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012 Edward Kmett
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
 -- Stability   :  provisional
diff --git a/src/Linear/Instances.hs b/src/Linear/Instances.hs
--- a/src/Linear/Instances.hs
+++ b/src/Linear/Instances.hs
@@ -1,11 +1,11 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 {-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+#if __GLASGOW_HASKELL__ >= 702 && __GLASGOW_HASKELL__ < 710
 {-# LANGUAGE Trustworthy #-}
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012 Edward Kmett
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
 -- Stability   :  provisional
@@ -19,14 +19,18 @@
 import Control.Monad.Fix
 import Control.Monad.Zip
 import Data.Complex
+#if __GLASGOW_HASKELL__ < 710
 import Data.Foldable
+#endif
 import Data.Functor.Bind
 import Data.HashMap.Lazy as HashMap
 import Data.Hashable
 import Data.Semigroup
 import Data.Semigroup.Foldable
 import Data.Semigroup.Traversable
+#if __GLASGOW_HASKELL__ < 710
 import Data.Traversable
+#endif
 
 instance (Hashable k, Eq k) => Apply (HashMap k) where
   (<.>) = HashMap.intersectionWith id
diff --git a/src/Linear/Matrix.hs b/src/Linear/Matrix.hs
--- a/src/Linear/Matrix.hs
+++ b/src/Linear/Matrix.hs
@@ -7,7 +7,7 @@
 
 ---------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -35,7 +35,9 @@
   , _m42, _m43, _m44
   ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
 import Control.Lens hiding (index)
 import Control.Lens.Internal.Context
 import Control.Monad (guard)
diff --git a/src/Linear/Metric.hs b/src/Linear/Metric.hs
--- a/src/Linear/Metric.hs
+++ b/src/Linear/Metric.hs
@@ -5,7 +5,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/Plucker.hs b/src/Linear/Plucker.hs
--- a/src/Linear/Plucker.hs
+++ b/src/Linear/Plucker.hs
@@ -10,7 +10,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -567,8 +567,13 @@
   rnf (Plucker a b c d e f) = rnf a `seq` rnf b `seq` rnf c
                         `seq` rnf d `seq` rnf e `seq` rnf f
 
-instance Serial1 Plucker
-instance Serial a => Serial (Plucker a)
+instance Serial1 Plucker where
+  serializeWith = traverse_
+  deserializeWith k = Plucker <$> k <*> k <*> k <*> k <*> k <*> k
+
+instance Serial a => Serial (Plucker a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
 
 instance Binary a => Binary (Plucker a) where
   put = serializeWith Binary.put
diff --git a/src/Linear/Plucker/Coincides.hs b/src/Linear/Plucker/Coincides.hs
--- a/src/Linear/Plucker/Coincides.hs
+++ b/src/Linear/Plucker/Coincides.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE GADTs #-}
 ---------------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2014 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/Projection.hs b/src/Linear/Projection.hs
--- a/src/Linear/Projection.hs
+++ b/src/Linear/Projection.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP #-}
 ---------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2014 Edward Kmett
+-- Copyright   :  (C) 2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/Quaternion.hs b/src/Linear/Quaternion.hs
--- a/src/Linear/Quaternion.hs
+++ b/src/Linear/Quaternion.hs
@@ -11,7 +11,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -559,8 +559,13 @@
 instance NFData a => NFData (Quaternion a) where
   rnf (Quaternion a b) = rnf a `seq` rnf b
 
-instance Serial1 Quaternion
-instance Serial a => Serial (Quaternion a)
+instance Serial1 Quaternion where
+  serializeWith f (Quaternion a b) = f a >> serializeWith f b
+  deserializeWith f = Quaternion <$> f <*> deserializeWith f
+
+instance Serial a => Serial (Quaternion a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
 
 instance Binary a => Binary (Quaternion a) where
   put = serializeWith Binary.put
diff --git a/src/Linear/Trace.hs b/src/Linear/Trace.hs
--- a/src/Linear/Trace.hs
+++ b/src/Linear/Trace.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE DefaultSignatures #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+#if __GLASGOW_HASKELL__ >= 702 && __GLASGOW_HASKELL__ < 710
 {-# LANGUAGE Trustworthy #-}
 #endif
 ---------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/V.hs b/src/Linear/V.hs
--- a/src/Linear/V.hs
+++ b/src/Linear/V.hs
@@ -22,7 +22,7 @@
 
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -44,7 +44,9 @@
   , fromVector
   ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
 import Control.DeepSeq (NFData)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -62,7 +64,9 @@
 #endif
 import Data.Reflection as R
 import Data.Serialize as Cereal
+#if __GLASGOW_HASKELL__ < 710
 import Data.Traversable (sequenceA)
+#endif
 import Data.Vector as V
 import Foreign.Ptr
 import Foreign.Storable
diff --git a/src/Linear/V0.hs b/src/Linear/V0.hs
--- a/src/Linear/V0.hs
+++ b/src/Linear/V0.hs
@@ -14,7 +14,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -80,8 +80,8 @@
                         )
 
 instance Serial1 V0 where
-  serializeWith f = serialize
-  deserializeWith f = deserialize
+  serializeWith _ = serialize
+  deserializeWith _ = deserialize
 
 instance Serial (V0 a) where
   serialize V0 = return ()
diff --git a/src/Linear/V1.hs b/src/Linear/V1.hs
--- a/src/Linear/V1.hs
+++ b/src/Linear/V1.hs
@@ -19,7 +19,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
diff --git a/src/Linear/V2.hs b/src/Linear/V2.hs
--- a/src/Linear/V2.hs
+++ b/src/Linear/V2.hs
@@ -12,7 +12,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -375,8 +375,13 @@
 instance NFData a => NFData (V2 a) where
   rnf (V2 a b) = rnf a `seq` rnf b
 
-instance Serial1 V2
-instance Serial a => Serial (V2 a)
+instance Serial1 V2 where
+  serializeWith = traverse_
+  deserializeWith k = V2 <$> k <*> k
+
+instance Serial a => Serial (V2 a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
 
 instance Binary a => Binary (V2 a) where
   put = serializeWith Binary.put
diff --git a/src/Linear/V3.hs b/src/Linear/V3.hs
--- a/src/Linear/V3.hs
+++ b/src/Linear/V3.hs
@@ -11,7 +11,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -398,8 +398,13 @@
 instance NFData a => NFData (V3 a) where
   rnf (V3 a b c) = rnf a `seq` rnf b `seq` rnf c
 
-instance Serial1 V3
-instance Serial a => Serial (V3 a)
+instance Serial1 V3 where
+  serializeWith = traverse_
+  deserializeWith k = V3 <$> k <*> k <*> k
+
+instance Serial a => Serial (V3 a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
 
 instance Binary a => Binary (V3 a) where
   put = serializeWith Binary.put
diff --git a/src/Linear/V4.hs b/src/Linear/V4.hs
--- a/src/Linear/V4.hs
+++ b/src/Linear/V4.hs
@@ -11,7 +11,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012-2013 Edward Kmett,
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
@@ -545,8 +545,13 @@
 instance NFData a => NFData (V4 a) where
   rnf (V4 a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
 
-instance Serial1 V4
-instance Serial a => Serial (V4 a)
+instance Serial1 V4 where
+  serializeWith = traverse_
+  deserializeWith k = V4 <$> k <*> k <*> k <*> k
+
+instance Serial a => Serial (V4 a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
 
 instance Binary a => Binary (V4 a) where
   put = serializeWith Binary.put
diff --git a/src/Linear/Vector.hs b/src/Linear/Vector.hs
--- a/src/Linear/Vector.hs
+++ b/src/Linear/Vector.hs
@@ -10,7 +10,7 @@
 #endif
 -----------------------------------------------------------------------------
 -- |
--- Copyright   :  (C) 2012 Edward Kmett
+-- Copyright   :  (C) 2012-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
 -- Stability   :  provisional
@@ -36,12 +36,18 @@
 import Control.Applicative
 import Control.Lens
 import Data.Complex
+#if __GLASGOW_HASKELL__ < 710
 import Data.Foldable as Foldable (Foldable, forM_, foldl')
+#else
+import Data.Foldable as Foldable (forM_, foldl')
+#endif
 import Data.HashMap.Lazy as HashMap
 import Data.Hashable
 import Data.IntMap as IntMap
 import Data.Map as Map
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid (mempty)
+#endif
 import Data.Vector as Vector
 import Data.Vector.Mutable as Mutable
 #ifdef USE_GHC_GENERICS
@@ -133,7 +139,7 @@
 
   -- | Compute the difference between two vectors
   --
-  -- >>> V2 4 5 - V2 3 1
+  -- >>> V2 4 5 ^-^ V2 3 1
   -- V2 1 4
   (^-^) :: Num a => f a -> f a -> f a
 #ifdef USE_GHC_GENERICS
