diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+1.15.3
+------
+* Added missing `FunctorWithIndex`, `FoldableWithIndex` and `TraversableWithIndex Int (V n)` instances for `V`
+
 1.15.2
 ------
 * Added `frustum`, analogous to the old `glFrustum` call.
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.15.2
+version:       1.15.3
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
diff --git a/src/Linear/Projection.hs b/src/Linear/Projection.hs
--- a/src/Linear/Projection.hs
+++ b/src/Linear/Projection.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 ---------------------------------------------------------------------------
 -- |
 -- Copyright   :  (C) 2014 Edward Kmett
@@ -28,6 +29,10 @@
 import Linear.Matrix
 import Linear.Epsilon
 import Linear.Metric
+
+#ifdef HLINT
+{-# ANN module "HLint: ignore Reduce duplication" #-}
+#endif
 
 -- | Build a look at view matrix
 lookAt
diff --git a/src/Linear/V.hs b/src/Linear/V.hs
--- a/src/Linear/V.hs
+++ b/src/Linear/V.hs
@@ -126,13 +126,25 @@
   fmap f (V as) = V (fmap f as)
   {-# INLINE fmap #-}
 
+instance FunctorWithIndex Int (V n) where
+  imap f (V as) = V (Lens.imap f as)
+  {-# INLINE imap #-}
+
 instance Foldable (V n) where
   foldMap f (V as) = foldMap f as
   {-# INLINE foldMap #-}
 
+instance FoldableWithIndex Int (V n) where
+  ifoldMap f (V as) = ifoldMap f as
+  {-# INLINE ifoldMap #-}
+
 instance Traversable (V n) where
   traverse f (V as) = V <$> traverse f as
   {-# INLINE traverse #-}
+
+instance TraversableWithIndex Int (V n) where
+  itraverse f (V as) = V <$> itraverse f as
+  {-# INLINE itraverse #-}
 
 instance Apply (V n) where
   V as <.> V bs = V (V.zipWith id as bs)
