diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+1.11.3
+------
+* Fixed an issue with `UndecidableInstances` on GHC 7.6.3
+
 1.11.2
 ------
 * Added `Linear.Perspective`.
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.11.2
+version:       1.11.3
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
diff --git a/src/Linear/Affine.hs b/src/Linear/Affine.hs
--- a/src/Linear/Affine.hs
+++ b/src/Linear/Affine.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE RankNTypes #-}
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
diff --git a/src/Linear/Perspective.hs b/src/Linear/Perspective.hs
--- a/src/Linear/Perspective.hs
+++ b/src/Linear/Perspective.hs
@@ -13,6 +13,7 @@
   ( lookAt
   , perspective
   , infinitePerspective
+  , ortho
   ) where
 
 import Control.Lens hiding (index)
@@ -23,7 +24,12 @@
 import Linear.Metric
 
 -- | Build a look at view matrix
-lookAt :: (Epsilon a, Floating a) => V3 a -> V3 a -> V3 a -> M44 a
+lookAt
+  :: (Epsilon a, Floating a)
+  => V3 a -- ^ Eye
+  -> V3 a -- ^ Center
+  -> V3 a -- ^ Up
+  -> M44 a
 lookAt eye center up =
   V4 (V4 (xa^._x)  (xa^._y)  (xa^._z)  xd)
      (V4 (ya^._x)  (ya^._y)  (ya^._z)  yd)
@@ -37,7 +43,13 @@
         zd = dot za eye
 
 -- | Build a matrix for a symmetric perspective-view frustum
-perspective :: Floating a => a -> a -> a -> a -> M44 a
+perspective
+  :: Floating a
+  => a -- ^ FOV
+  -> a -- ^ Aspect ratio
+  -> a -- ^ Near plane
+  -> a -- ^ Far plane
+  -> M44 a
 perspective fovy aspect near far =
   V4 (V4 x 0 0    0)
      (V4 0 y 0    0)
@@ -50,7 +62,12 @@
         w = -(2 * far * near) / (far - near)
 
 -- | Build a matrix for a symmetric perspective-view frustum with a far plane at infinite
-infinitePerspective :: Floating a => a -> a -> a -> M44 a
+infinitePerspective
+  :: Floating a
+  => a -- ^ FOV
+  -> a -- ^ Aspect Ratio
+  -> a -- ^ Near plane
+  -> M44 a
 infinitePerspective fovy aspect near =
   V4 (V4 x 0 0    0)
      (V4 0 y 0    0)
@@ -64,3 +81,22 @@
         x = (2 * near) / (right - left)
         y = (2 * near) / (top - bottom)
         w = -2 * near
+
+-- | Build an orthographic perspective matrix from 6 clipping planes
+ortho
+  :: Floating a
+  => a -- ^ Left
+  -> a -- ^ Right
+  -> a -- ^ Bottom
+  -> a -- ^ Top
+  -> a -- ^ Near
+  -> a -- ^ Far
+  -> M44 a
+ortho left right bottom top near far =
+  V4 (V4 (2 / a) 0       0        (negate ((right + left) / a)))
+     (V4 0       (2 / b) 0        (negate ((top + bottom) / b)))
+     (V4 0       0       (-2 / c) ((far + near) / c))
+     (V4 0       0       0        1)
+  where a = right - left
+        b = top - bottom
+        c = far - near
diff --git a/src/Linear/V.hs b/src/Linear/V.hs
--- a/src/Linear/V.hs
+++ b/src/Linear/V.hs
@@ -292,3 +292,9 @@
 instance Each (V n a) (V n b) a b where
   each = traverse
   {-# INLINE each #-}
+
+instance (Bounded a, Dim n) => Bounded (V n a) where
+  minBound = pure minBound
+  {-# INLINE minBound #-}
+  maxBound = pure maxBound
+  {-# INLINE maxBound #-}
diff --git a/src/Linear/V0.hs b/src/Linear/V0.hs
--- a/src/Linear/V0.hs
+++ b/src/Linear/V0.hs
@@ -226,3 +226,9 @@
 
 instance MonadFix V0 where
   mfix _ = V0
+
+instance Bounded (V0 a) where
+  minBound = V0
+  {-# INLINE minBound #-}
+  maxBound = V0
+  {-# INLINE maxBound #-}
diff --git a/src/Linear/V1.hs b/src/Linear/V1.hs
--- a/src/Linear/V1.hs
+++ b/src/Linear/V1.hs
@@ -263,3 +263,9 @@
 
 instance MonadFix V1 where
   mfix f = V1 (let V1 a = f a in a)
+
+instance Bounded a => Bounded (V1 a) where
+  minBound = pure minBound
+  {-# INLINE minBound #-}
+  maxBound = pure maxBound
+  {-# INLINE maxBound #-}
diff --git a/src/Linear/V2.hs b/src/Linear/V2.hs
--- a/src/Linear/V2.hs
+++ b/src/Linear/V2.hs
@@ -320,3 +320,9 @@
 
 angle :: Floating a => a -> V2 a
 angle a = V2 (cos a) (sin a)
+
+instance Bounded a => Bounded (V2 a) where
+  minBound = pure minBound
+  {-# INLINE minBound #-}
+  maxBound = pure maxBound
+  {-# INLINE maxBound #-}
diff --git a/src/Linear/V3.hs b/src/Linear/V3.hs
--- a/src/Linear/V3.hs
+++ b/src/Linear/V3.hs
@@ -314,3 +314,9 @@
   mfix f = V3 (let V3 a _ _ = f a in a)
               (let V3 _ a _ = f a in a)
               (let V3 _ _ a = f a in a)
+
+instance Bounded a => Bounded (V3 a) where
+  minBound = pure minBound
+  {-# INLINE minBound #-}
+  maxBound = pure maxBound
+  {-# INLINE maxBound #-}
diff --git a/src/Linear/V4.hs b/src/Linear/V4.hs
--- a/src/Linear/V4.hs
+++ b/src/Linear/V4.hs
@@ -341,3 +341,9 @@
               (let V4 _ a _ _ = f a in a)
               (let V4 _ _ a _ = f a in a)
               (let V4 _ _ _ a = f a in a)
+
+instance Bounded a => Bounded (V4 a) where
+  minBound = pure minBound
+  {-# INLINE minBound #-}
+  maxBound = pure maxBound
+  {-# INLINE maxBound #-}
