diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+5.1.1
+-----
+* Add proper support for GHC 7.0+.
+
 5.1
 ---
 * `instance Costrong (Cokleisli f)`.
diff --git a/profunctors.cabal b/profunctors.cabal
--- a/profunctors.cabal
+++ b/profunctors.cabal
@@ -1,6 +1,6 @@
 name:          profunctors
 category:      Control, Categories
-version:       5.1
+version:       5.1.1
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
diff --git a/src/Data/Profunctor/Tambara.hs b/src/Data/Profunctor/Tambara.hs
--- a/src/Data/Profunctor/Tambara.hs
+++ b/src/Data/Profunctor/Tambara.hs
@@ -51,7 +51,10 @@
 instance ProfunctorComonad Tambara where
   proextract (Tambara p) = dimap (\a -> (a,())) fst p
   produplicate (Tambara p) = Tambara (Tambara $ dimap hither yon p) where
+    hither :: ((a, b), c) -> (a, (b, c))
     hither ~(~(x,y),z) = (x,(y,z))
+
+    yon    :: (a, (b, c)) -> ((a, b), c)
     yon    ~(x,~(y,z)) = ((x,y),z)
 
 instance Profunctor p => Strong (Tambara p) where
@@ -60,8 +63,11 @@
 
 instance Choice p => Choice (Tambara p) where
   left' (Tambara f) = Tambara $ dimap hither yon $ left' f where
+    hither :: (Either a b, c) -> Either (a, c) (b, c)
     hither (Left y, s) = Left (y, s)
     hither (Right z, s) = Right (z, s)
+
+    yon :: Either (a, c) (b, c) -> (Either a b, c)
     yon (Left (y, s)) = (Left y, s)
     yon (Right (z, s)) = (Right z, s)
 
@@ -72,12 +78,16 @@
 instance Arrow p => Arrow (Tambara p) where
   arr f = Tambara $ arr $ first f
   first (Tambara f) = Tambara (arr go . first f . arr go) where
+    go :: ((a, b), c) -> ((a, c), b)
     go ~(~(x,y),z) = ((x,z),y)
 
 instance ArrowChoice p => ArrowChoice (Tambara p) where
   left (Tambara f) = Tambara (arr yon . left f . arr hither) where
+    hither :: (Either a b, c) -> Either (a, c) (b, c)
     hither (Left y, s) = Left (y, s)
     hither (Right z, s) = Right (z, s)
+
+    yon :: Either (a, c) (b, c) -> (Either a b, c)
     yon (Left (y, s)) = (Left y, s)
     yon (Right (z, s)) = (Right z, s)
 
@@ -86,6 +96,7 @@
 
 instance ArrowLoop p => ArrowLoop (Tambara p) where
   loop (Tambara f) = Tambara (loop (arr go . f . arr go)) where
+    go :: ((a, b), c) -> ((a, c), b)
     go ~(~(x,y),z) = ((x,z),y)
 
 instance ArrowZero p => ArrowZero (Tambara p) where
@@ -148,9 +159,9 @@
   projoin (Pastro l (Pastro m n o) p) = Pastro lm n op where
     op a = case p a of
       (b, f) -> case o b of
-         (c, g) -> (c, (f, g)) 
+         (c, g) -> (c, (f, g))
     lm (d, (f, g)) = l (m (d, g), f)
-    
+
 instance ProfunctorAdjunction Pastro Tambara where
   counit (Pastro g (Tambara p) f) = dimap f g p
   unit p = Tambara (Pastro id p id)
@@ -168,9 +179,12 @@
 instance ProfunctorComonad Cotambara where
   proextract (Cotambara p)   = dimap Left (\(Left a) -> a) p
   produplicate (Cotambara p) = Cotambara (Cotambara $ dimap hither yon p) where
+    hither :: Either (Either a b) c -> Either a (Either b c)
     hither (Left (Left x))   = Left x
     hither (Left (Right y))  = Right (Left y)
     hither (Right z)         = Right (Right z)
+
+    yon    :: Either a (Either b c) -> Either (Either a b) c
     yon    (Left x)          = Left (Left x)
     yon    (Right (Left y))  = Left (Right y)
     yon    (Right (Right z)) = Right z
diff --git a/src/Data/Profunctor/Unsafe.hs b/src/Data/Profunctor/Unsafe.hs
--- a/src/Data/Profunctor/Unsafe.hs
+++ b/src/Data/Profunctor/Unsafe.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 708
 {-# LANGUAGE Trustworthy #-}
-#else
+#elif __GLASGOW_HASKELL >= 704
 {-# LANGUAGE Unsafe #-}
 #endif
 {-# LANGUAGE ScopedTypeVariables #-}
